【发布时间】:2018-11-27 18:37:10
【问题描述】:
#include <stdio.h>
#include <string.h>
int main(void) {
char tekst[10000], test=0;
char* word;
char word_copy[100][100];
int i=0, lenght=0;
printf("Type in your text: ");
fgets(tekst, 10000, stdin);
lenght=strlen(tekst)-1;
if(lenght>1000)
{
lenght=1000;
}
word=strtok(tekst, " ,\".-");
while( word != NULL)
{
word=strtok(NULL, " ,\".-");
printf("%s ", word);
i++;
}
printf("%d", i);
你好。我想要做的是仅使用 strtok 来计算单词。但是,如果我输入:“example”或-example-,我得到的答案是“2”而不是“1”。出于某种原因,当最后一个单词为 (null) 时,它仍然会触发循环,并且 i++ 可以工作......我对编程很陌生,所以我也希望能写下正确的代码。
【问题讨论】:
-
对于初学者,不要尝试打印
NULL。在打印之前测试是否为 NULL。 -
并在 strtok 返回 NULL 时中断,因此您不算数。
-
现在学习如何使用调试器找出程序中发生的事情还为时过早。
-
即使
word为空,您也可以算数。使用while ((word = strtok(NULL, " ,\".-")) != NULL) { printf("%s ", word); i++; }。 -
实际上,我知道我应该在打印前使用 strcpy 或测试它,但我很困惑,需要一些快速信息,然后在复制时将其留在这里,哈哈。非常感谢你。我之前尝试过打破while,但是我在if中使用了“word”,这次我按照建议尝试了完整的“strtok(..)”,它奏效了!我真的很感谢你的帮助。祝你有美好的一天!