gpt4 book ai didi

在C中计算文本文件中的关键字

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:21 24 4
gpt4 key购买 nike

#include <stdio.h>  
#include <stdlib.h>
#include <string.h>


int c;

char* lib[5] = { "auto", "break", "char", "case", "const" };
char str[1000];
char buffer[300];
FILE *fp;

int main(){

c = 0;

fp = fopen("filename.txt", "r");

if (fp == NULL){
perror("Error in reading file");
}

if (fp != NULL){
for (int j = 0; j < 5; j++){
while (fgets(str, sizeof(buffer), fp) != NULL){
if (strstr(str, lib[j]) != NULL) {
c++;
}
}
}
printf("%d", c);
}
while (1){};
}

所以我正在尝试计算文本文件中关键字的数量。该代码无法编译,并指出问题出在 for 循环和 strstr 参数上。在之前的尝试中,它会编译,但不会计算关键字的数量,它只是打印了 0。我如何解决这个问题以便代码编译的任何想法或另一种计算文本文件中关键字数量的简单方法.

代码片段会很有帮助。

最佳答案

您的主要问题是(在您对其进行编辑之前)您的输入循环嵌套正确并且您的搜索循环被颠倒了。

此外,正如目前所写的那样,您并没有真正计算文件中 lib 中单词实例的总数,因为您没有正确处理相同字符串的情况(例如 - "char") 多次出现在给定行/输入中。

这是一个不同的版本:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(int argc, char **argv)
{
const char *lib[5] = { "auto", "break", "char", "case", "const" };
char *str = NULL;
size_t cap = 0;
int c = 0;
const char *srch;
FILE *fp;
int i, j;

for (i = 1; i < argc; ++i, c = 0)
{
if (NULL == (fp = fopen(argv[i], "r"))) {
perror(argv[i]);
continue;
}

while (-1 != getline(&str, &cap, fp))
for (j = 0, srch = str; j < 5; ++j, srch = str)
while (NULL != (srch = strstr(srch, lib[j])))
{
const char *next_srch = srch + strlen(lib[j]);

if ((srch == str || !isalnum(srch[-1])) && // ensure prev char not alphanumeric
!isalnum(next_srch[0])) // ensure next char not alphanumeric
++c;

srch = next_srch;
}

fclose(fp);
printf("%s: %d\n", argv[i], c);
}

if (str)
free(str);

return 0;
}

关于在C中计算文本文件中的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28887130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com