我正在尝试编写一个可以在文件中搜索字符串的程序(名为student.txt)。我希望我的程序在文件中找到相同的单词时打印该单词,但显示错误。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int num =0;
char word[2000];
char *string[50];
FILE *in_file = fopen("student.txt", "r");
//FILE *out_file = fopen("output.txt", "w");
if (in_file == NULL)
{
printf("Error file missing\n");
exit(-1);
}
while(student[0]!= '0')
{
printf("please enter a word(enter 0 to end)\n");
scanf("%s", student);
while(!feof(in_file))
{
fscanf(in_file,"%s", string);
if(!strcmp(string, student))==0//if match found
num++;
}
printf("we found the word %s in the file %d times\n",word,num );
num = 0;
}
return 0;
}
答案 0 :(得分:0)
以最简单的形式添加了示例代码。照顾任何角落案件。 如果您正在搜索字符串“to”。文件内容是:
<tom took two tomatoes to make a curry> .
输出将为5.但实际上只有一个词“to”。
代码:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{
int num =0;
char word[2000];
char string[50];
char student[100] = {0};
while(student[0]!= '0')
{
FILE *in_file = fopen("student.txt", "r");
if (in_file == NULL)
{
printf("Error file missing\n");
exit(-1);
}
printf("please enter a word(enter 0 to end)\n");
scanf("%s", student);
while ( fscanf(in_file,"%s", string) == 1)
{
//Add a for loop till strstr(string, student) does-not returns null.
if(strstr(string, student)!=0) {//if match found
num++;
}
}
printf("we found the word %s in the file %d times\n",student,num );
num = 0;
fclose(in_file);
}
return 0;
}
正如我的同事们正确地说的那样,我们需要再循环一遍来查找同一行中同一单词的任何进一步实例。
注意:如果您只想计算单词“to”,请务必检查所有可能的单词分隔符的“string - 1”和“string + 1”字符像空格,逗号,句号,换行符,感叹号,&符号,等号和任何其他可能性。一种简单的方法是使用strtok,它会根据参数中指定的分隔符将缓冲区标记为单词。查看如何使用strtok。
http://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm
答案 1 :(得分:0)
您应该从文件中读取(创建函数)单词。我所说的单词是指由空格(例如空格)包围的非空白字符数组(但不要在单词列表中记录空格)。然后搜索单词列表(或通过动态单词)以查找所需的单词。
答案 2 :(得分:-1)
在最后student
行使用变量printf()
,或将匹配的文字放在变量word
中,并检查if条件。