【发布时间】:2015-01-14 06:42:30
【问题描述】:
我正在使用fgets() 读取包含以下由空格分隔的整数值的行:
while(fgets(str, sizeof(str), stdin) != NULL)
读取str中的字符串后,我使用strtok()将字符串转换为标记,然后使用atoi()函数将这些值转换为整数。
token = strtok(str, s);
while( token != NULL) //If token is NULL then don't convert it to integer
int d = atoi(token);
第一个输入的输出符合预期。
输入 1:
5 1 0 3 4\n
输出 1:
d=5
d=1
d=0
d=3
d=4
现在,当我在字符串后面留一个空格并按回车时,就会出现问题。
输入 2:
5 1 0 3 4 \n
输出 2:
d=5
d=1
d=0
d=3
d=4
d=0
所以现在我的问题是:
1.如果末尾只有空格,strtok()会不会返回NULL?
2.如何区分输出中的两个零?
3.如何避免strtok() 读取最后的空格或末尾的任意数量的空格?
【问题讨论】:
-
你错过了告诉我们strtok的实际参数。试试这个:
strtok(str, " \n"); -
fgets将在末尾保留换行符。考虑在您的分隔符字符串中包含换行符(可能还有制表符):strtok(str, " \n\t"). -
s是什么?s应该是分隔符 -
@harper 谢谢。它就像我使用
token = strtok(NULL, " \n");一样工作,即空格和换行符一起使用。