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