C -StrCMP比较两个应该相同的单词时失败



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

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失败,无法将两个字符串一起比较。我真的不知道还有其他地方去哪里,但是如果有人可以在解释中看到我的错误,那么我将非常感谢被纠正并显示出我的错误。我很想发布更多的代码,但这与学校有关,因此我无法在内部遇到麻烦。如果您想要更多的解释,我很乐意解释更多。

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

您可以用

清除新线
string[strcspn(string, "n")] = 0;

fgets之后,您可以在使用时将n添加到定界符列表中 strtok

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

strtok在这种情况下将使用空空间新行分界符,因此newline不出现在token

最新更新