#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 - 计算C中文本文件中的关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28887130/