小编use*_*576的帖子

在文件C中查找字符串的子字符串

我正在尝试通过输入到标准输入的字符串选择性地过滤文本文件.

我想知道为什么以下代码不起作用以及如何解决它:

void get_filtered_list()
{
    FILE * f;
    f=fopen("presentlist.txt","r"); 
    printf("Enter the city by which you want to select lines:\n");
    char stringToFind[20]; 
    fgets(stringToFind, sizeof(stringToFind), stdin );
    char line[160];
    while (!feof(f)){
        fgets(line,sizeof(line),f); 
        if(strstr(line, stringToFind) != NULL) 
        {
            printf("%s",line);
        }
    }
    fclose(f);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码试图获取一个文本文件,打开该文件,然后逐行读取文件,并为执行该strstr()函数的每一行以文件的当前行作为参数1作为字符串,并给出给定的名称城市作为参数2作为字符串.

然而,我得到的结果是打印文件的整个内容(最后一行打印两次,虽然这是一个单独的问题,我知道这部分的修复).

我正在阅读的C书说明该strstr()函数用于在"haystack"字符串中查找"needle"字符串,因此它是C++ substr()函数的C等价物.

strstr() 将参数1作为干草堆,将参数2作为针.

我首先从标准输入读入到针中,然后逐行检查是否strstr()返回NULL(如果在haystack中找不到针,它应该返回NULL)并且如果它返回NULL之外的其他东西,则意味着它找到字符串中的子字符串,它应该只打印行THEN.

而是打印文件中的所有行.为什么?

如果我将其切换为f(strstr(line, stringToFind))相反,那么它绝对不打印.

为什么?

c string

0
推荐指数
1
解决办法
3762
查看次数

标签 统计

c ×1

string ×1