所以我有一个单词列表,让我们称之为
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
失败,无法将两个字符串进行比较。我真的不知道还有什么可以去做,但如果有人可能在我的解释中看到我的错误,那么我将非常感谢被纠正并显示我的错误。我想发布更多的代码,但这与学校有关,所以我不能发布更多可能遇到麻烦。如果您想要更多解释,我很乐意解释更多。
答案 0 :(得分:2)
如果您使用stdin
从fgets
阅读,则很可能是新行
存储在string
变量中。
您可以使用
清除换行符string[strcspn(string, "\n")] = 0;
在fgets
之后,或者您可以在使用时将\n
添加到分隔符列表中
strtok
:
char *token;
token = strtok(string, " \n");
在这种情况下, strtok
会使用空行和作为新行
分隔符,因此换行符不会出现在token
。