所以我有一个单词列表,我们称它们为
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
失败并且无法将两个字符串比较在一起。我真的不知道还能去哪里,但如果有人能在我的解释中看到我的错误,那么我将非常感激得到纠正并指出我的错误。我很想发布更多代码,但这与学校有关,因此我无法在可能遇到麻烦的情况下发布更多代码。如果您想要更多解释,我很乐意解释更多。
最佳答案
如果您使用 fgets
从 stdin
读取数据,那么很可能换行是
存储在您的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/