【发布时间】:2018-04-02 00:56:44
【问题描述】:
所以我有一个单词列表,我们称它们为
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 失败并且无法将两个字符串比较在一起。我真的不知道还有什么地方可以解决这个问题,但如果有人可以在我的解释中看到我的错误,那么我将非常感谢得到纠正并展示我的错误。我很想发布更多代码,但这与学校有关,所以我不能在可能遇到麻烦的情况下发布更多代码。如果您想要更多解释,我很乐意解释更多。
【问题讨论】:
-
不要用“然后我有一个从标准输入读取的字符串”来描述代码,而是发布代码。
-
@chux 正如我提到的,我不能发布太多代码,因为这是给学校的,我可以保证我没看错,因为这是我做过很多次的事情。
-
请阅读tour 然后How to Ask 然后minimal reproducible example。然后将您的问题编辑为 mcve。
-
... 或者使用你的调试器看看为什么 string != words[i]。这可能类似于在字符串中包含 \r \n 字符。
-
我怀疑你的字符串中有换行符。