代码之家  ›  专栏  ›  技术社区  ›  AFC

比较两个应该相同的单词时,strcmp失败

  •  -2
  • AFC  · 技术社区  · 6 年前

    所以我有一个单词列表,让我们调用它们

    words = {"red", "blue", "yellow", "green", "orange"}
    

    然后我有一个字符串,我从中读取 stdin ,我使用以下代码解析此字符串

    char *token; 
    token = strtok(string," ");
    

    然后,我将新标记与for循环中的单词列表进行比较,使用

    strcmp(token,words[i]);
    

    现在,这只在我的输入后面至少有一个空格时才起作用,例如,

    "blue hello" "blue " ,将计算为匹配的单词,因为标记将等于 "blue" 但如果我的意见是 “蓝色” 令牌为 "" 我无法将两者进行比较。

    现在我的解决方法包括运行 isblank() 在字符串上,如果字符串中有空格,则只使用笔划,如果没有空格,则只比较字符串本身,因为我知道它只有一个单词

    strcmp(string, words[I])
    

    但这也会导致 strcmp 失败并且无法将两个字符串进行比较。我真的不知道还有什么地方可以这样做,但如果有人能看到我在解释中的错误,那么我将非常感激被纠正并显示我的错误。我很想发布更多的代码,但这与学校有关,所以我无法在可能遇到麻烦的范围内发布更多代码。如果你想要更多的解释,我很乐意解释更多。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Pablo    6 年前

    如果您正在阅读 stdin 具有 fgets ,那么最有可能的新线是 存储在您的 string 变量

    您可以使用

    string[strcspn(string, "\n")] = 0;
    

    fgets 或者您可以添加 \n 使用时添加到分隔符列表 strtok :

    char *token; 
    token = strtok(string, " \n");
    

    斯特托克 在这种情况下会使用一个空格吗 新线为 分隔符,因此换行符不会出现在 token