练习考试比较文件中的字符串

时间:2013-06-27 16:18:53

标签: c string file compare

明天我正试着为我的考试做这个练习。

我需要比较一下我自己输入的字符串,看看该字符串是否出现在文件中。这需要直接在文件上完成,所以我无法将字符串提取到我的程序并“间接”比较它们。

我发现了这种方式,但我没有做对,我不知道为什么。这个算法听起来不错。

请帮忙吗?我真的需要关注这个。

先谢谢你们。

#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;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

匹配第一个字符后的逻辑看起来很可疑。无需在文件中查找,您需要阅读更多内容以尝试匹配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它最多可以写入charsrc。写入超过50的内容将超出为src分配的内存,并带来不确定的后果。你应该把它改成

char src[50];
fgets(src, sizeof(src), stdin);

答案 1 :(得分:0)

while((ch = fgetc(file)) != EOF)
{
    if(ch != compare[i]){
       i = 0;
     }
    else{
    i++;
     }

    if(i >= strlen(compare){
    printf("we have a match");
    break;
     }


}