我正在尝试为明天的考试做这个练习。
我需要比较自己输入的字符串,看看该字符串是否出现在文件中。这需要直接在文件上完成,所以我无法将字符串提取到我的程序中并“间接”比较它们。
我找到了这种方法,但我做错了,我也不知道为什么。该算法对我来说听起来不错。
有什么帮助吗?我真的需要专注于此。
提前致谢,伙计们。
#include<stdio.h>
void comp();
int main(void)
{
comp();
return 0;
}
void comp()
{
FILE *file = fopen("e1.txt", "r+");
if(!file)
{
printf("Not possible to open the file");
return;
}
char src[50], ch;
short i, len;
fprintf(stdout, "What are you looking for? \nwrite: ");
fgets(src, 200, stdin);
len = strlen(src);
while((ch = fgetc(file)) != EOF)
{
i = 0;
while(ch == src[i])
{
if(i <= len)
{
printf("%c - %c", ch, src[i]);
fseek(file, 0, SEEK_CUR + 1);
i++;
}
else break;
}
}
}
最佳答案
您在匹配第一个字符后的逻辑看起来很可疑。无需在文件中查找,您需要阅读更多内容以尝试匹配 src
中后面的字节并在每次迭代时重置 i
以防止您检查后面的字符来自 src
。
以下(未经测试的)代码应该更接近标记
i = 0;
while((ch = fgetc(file)) != EOF) {
if (ch != src[i]) {
i = 0;
}
else if (++i >= len) {
printf("found %s in file\n", src);
break;
}
}
它依赖于对 fgetc
而不是 fseek
的重复调用,并且仅在字符不匹配时才将索引重置为 src
。
还要注意
char src[50];
fgets(src, 200, stdin);
有点不对。它告诉 fgets
它最多可以将 200 个 char
写入 src
。写入任何多于 50 的内容都会超出为 src
分配的内存,并产生未定义的后果。你应该把它改成
char src[50];
fgets(src, sizeof(src), stdin);
关于c - 关于比较文件上的字符串的考试练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348274/