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

标签 c string compare

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

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

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

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

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

strcmp(token,words[i]);

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

"blue hello""blue ",将评估匹配的单词,因为 token 将等于 "blue" 但如果我的输入只是 "blue" token 是 "" 我无法比较两者。

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

strcmp(string, words[I])

但这也会导致 strcmp 失败并且无法将两个字符串比较在一起。我真的不知道还能去哪里,但如果有人能在我的解释中看到我的错误,那么我将非常感激得到纠正并指出我的错误。我很想发布更多代码,但这与学校有关,因此我无法在可能遇到麻烦的情况下发布更多代码。如果您想要更多解释,我很乐意解释更多。

最佳答案

如果您使用 fgetsstdin 读取数据,那么很可能换行是 存储在您的string变量中。

您可以使用以下命令清除换行符

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

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

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

strtok 在这种情况下将使用空格新行作为 分隔符,因此换行符不会出现在 token 中。

关于c - 比较两个应该相同的单词时 strcmp 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604082/

相关文章:

c - 在 "String Pointer"中搜索字符串 - C 语言

javascript - 未捕获的 TypeError : Module. cwrap 不是函数

python a[1 :] 的 javascript 简写

javascript - 数组元素和对象属性比较返回 false

c++ - 针对不同目标MCU开发C/C++代码的区别

C:在矩形(本初子午线、赤道等)内查找点的边缘情况?

c - 前面的零被忽略

java - 在 java 中,读取 url 并将其拆分为多个部分的最佳方法是什么?

string - strings.Contains()始终返回false

c - 将两个二维数组传递给函数进行比较