如何搜索以文件中的字符串开头的特定行

时间:2015-06-24 17:45:03

标签: c string algorithm

我正在尝试制作这个小程序。

有.txt文件:

namas house
katinas cat
suo dog
skaicius number

我想找到一个以特定单词开头的行,然后打印该行的第二个单词。 例如,用户输入单词katinas。程序查看文件,找到以katinas开头的行,最后打印。

到目前为止我所拥有的:

int main()
{
    char word;

    printf("Enter your word: ");
    scanf("%s", &word);

    FILE *fp;
    fp = fopen("data.txt", "r+");
    char buffer[256];
    while (fgets(buffer, sizeof buffer, fp) != NULL && atoi(buffer) != word)
    ;
    if (feof(fp))
    {
        printf(&buffer);
    }
    fclose(fp);

    return 0;
}

谢谢。

4 个答案:

答案 0 :(得分:2)

在其他地方指出的代码中有几个错误。这个答案会找到整个单词,例如" suo"但不是" su"。

#include<stdio.h>
#include<string.h>

int main()
{
    char word[256];                 // adequate string space (not single char)
    char buffer[256];
    char *sptr;
    FILE *fp;
    int found = 0;

    printf("Enter your word: ");
    scanf("%s", word);              // requires a string pointer (note no &)

    fp = fopen("data.txt", "r");    // removed "+"
    if (fp) {
        while (fgets(buffer, sizeof buffer, fp) != NULL) {
            sptr = strtok(buffer, " \t\r\n");
            if (sptr && strcmp(sptr, word) == 0) {
                sptr = strtok(NULL, " \t\r\n");
                if (sptr) {
                    printf("%s\n", sptr);
                    found = 1;
                    break;
                }
            }
        }
        fclose(fp);
    }
    if (!found)
        printf ("%s not found\n", word);
    return 0;
}

答案 1 :(得分:1)

你可以使用一个简单的逻辑,就像使用'for'搜索单词一样,在找到你想要的特定单词后立即使用'for'直到找到一个空格(使用''来确定一个单词的结尾和开头然后打印出所有字母,直到找到下一个空格''。这应该可以正常工作。

答案 2 :(得分:0)

  1. char word;是单个字符,无法存储;应该是一个数组,以便读取一行。

  2. atoi(buffer) != word您正在将int(由atoi()返回)与指针进行比较(数组名称在此处转换为指针)。我真的没有看到这个目的。

  3. 您无需检查是否已到达文件末尾。您只需逐行遍历文件并检查字符串。

  4. 在没有格式说明符的情况下调用printf并不安全,您也传递char (*)[256]printf需要const char*

  5. 您还应该对fopen()

  6. 进行错误检查
  7. 使用main()的标准原型,例如:int main(void)

  8. 在纠正所有这些后,代码将简化为:

    #include<stdio.h>
    #include<string.h>
    
    int main(void)
    {
        char word[256] = {0};
        char buffer[256] = {0};
        FILE *fp;
    
        printf("Enter your word: ");
        scanf("%s", word);
    
        fp = fopen("data.txt", "r+");
        if (!fp) { /* error */}
    
        while ( fgets(buffer, sizeof buffer, fp) )
        { 
           if( strstr(buffer, word) == buffer )
           printf("Found: %s\n", buffer); 
        }
    
        return 0;
    }
    

    没有库函数可以找到C中的字符串“以...开头”。我正在使用strstr来实现它。如果匹配,它等于buffer的起始地址,则以word开头。因为strstr返回指向第一个匹配的指针。

答案 3 :(得分:0)

return json_encode()