【问题标题】:Retrieving / comparing strings in file with user text检索/比较文件中的字符串与用户文本
【发布时间】:2014-03-28 15:25:09
【问题描述】:

我是 C 的新手,我希望编写一个程序来检查用户输入的单词是否是合法单词。我已经搜索了 stackoverflow 的建议,但很多都是针对特定情况的。请在我被激怒之前,我知道这种语法不正确,但正在寻找一些关于如何修复它的建议。我的主要问题是如何告诉程序检查下一行(在“\0”之后)。也许while 条件不是告诉C 检查的最好方法,直到没有更多行存在。在下面的代码中,我有一个“userword”的示例比较字符串,我用它来测试,但最终这将是用户输入的变量。

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

int main (void)
{
    FILE *fp;
    fp = fopen("/usr/share/dict/words", "r");
    char line[50];
    while(fgets(line,50,fp) != NULL)
    {
        if(!strcpy(line,"userword"))
        {
            printf("Word exists\n");
            return 0; 
        }
    }
    printf("Word not found, try again.\n");
    return 0;
}

【问题讨论】:

  • 直觉上似乎我需要另一个嵌套在“while”循环中的循环,它在找到每个“\0”后检查文件中的下一个字符串。我大概可以弄清楚如何寻找那个结尾字符,但不确定如何进入下一行。或者 C 是否将此文件视为一个连续的字符串,所以我只需要检查每个 "\0" 之间的字符?
  • strcpy()?你是说strcmp()
  • @jfly 嗯,是的。我知道我不应该在 102 发烧的情况下这样做。非常感谢老兄
  • 正在解决的具体问题,从长远来看,您可能想要一份 Jon Bentley 的Programming Pearls;第一版有一章介绍了这个过程,并描述了从原型到可用程序的过程。此外,“词干”字段对于存储在字典中会浪费的单词很有用。

标签: c fopen fgets strcpy


【解决方案1】:

strcpy() 复制一个字符串。您应该使用比较两个字符串的strcmp()

其次,当你从/usr/share/dict/words 中读取这一行时,末尾有一个换行符。你要么需要删除换行符(在你的while和if之前添加这个):

line[strlen(line) - 1] = '\0';

或将其与userword\n 进行比较。

【讨论】:

【解决方案2】:

我推荐strncmp() 来解决这个问题,因为fgets() 包含换行符:

if(!strncmp(line, "userword", strlen(line) - 1) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多