strcmp在比较两个应该是相同的单词时失败了

时间:2018-04-02 00:56:44

标签: c string compare

所以我有一个单词列表,让我们称之为

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

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

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

然后我使用

将新标记与for循环中的单词列表进行比较
strcmp(token,words[i]);

现在这仅在输入后跟至少一个空格时才有效,例如

"blue hello""blue "会评估匹配的字词,因为令牌等于"blue"但如果我的输入只是"blue",则令牌为""且我无法比较两者。

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

strcmp(string, words[I])

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

1 个答案:

答案 0 :(得分:2)

如果您使用stdinfgets阅读,则很可能是新行 存储在string变量中。

您可以使用

清除换行符
string[strcspn(string, "\n")] = 0;

fgets之后,或者您可以在使用时将\n添加到分隔符列表中 strtok

char *token; 
token = strtok(string, " \n");
在这种情况下,

strtok会使用空行作为新行 分隔符,因此换行符不会出现在token