我想阅读一个空格列表-字符串中存储的分隔数字。
我知道如何stringstream
在C ++中使用-
string s = "10 22 45 67 89";
stringstream ss(s);
int numbers[100];
int k=0, next_number;
while(ss>>next_number)
numbers[k++]=next_number;
我的问题是我们如何在C语言中执行此操作?我已经sscanf()
在C中读过,但是我不确定它在这里是否有用。
您可以使用sscanf
,如果你知道你的字符串中的预期项目数在这里:
char const *s = "10 22 45 67 89";
sscanf(s, "%d %d %d %d %d", numbers, numbers+1, numbers+2, numbers+3 numbers+4);
但是,如果您不知道先验项的数量,则可以尝试标记化输入,然后尝试分别转换每个项。
char s[] = "10 22 45 67 89";
char *n = strtok(s, " ");
do {
numbers[k++] = atoi(n);
} while (n = strtok(NULL, " "));
请注意,strtok
该接口的界面很丑陋-它修改了传递给它的字符串,并要求您大致按上述方式使用它-您在第一个调用中传递了输入字符串,然后对该字符串传递了NULL,以对后续调用进行标记化直到到达字符串的末尾。它在内部在字符串中存储了指向当前位置的指针,这也使线程安全成为问题。
您还可以sscanf
在%n
转换中使用它来计算已经转换的字符数,但这与(IMO)在几乎strtok
可以想象的最丑陋的代码中竞争一样,我无法处理一天之内发布的两件事。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句