![](/img/trans.png)
[英]How to convert float number to string without losing user-entered precision in C?
[英]Splitting a user-entered String into separate tokens by white space in C
我正在尝试逐字打印用户输入的字符串,或标记化。 我有:
char input [1000];
char* token;
scanf("%s", input);
token = strtok (input," ,.");
while (token != NULL){
printf("%s\n",token);
token = strtok(NULL, " ,.");
}
当我在控制台中输入内容时,说出“ test test a two three ..”,仅输出第一个单词。
您使用strtok
走上了正确的路。 尽管可以使用scanf
,但是存在一个明显的限制,即必须对计划转换的最大字符串数进行硬编码 。 如果您使用类似:
scanf("%s %s %s %s", string1, string2 ...
您转换为令牌的操作将因以下原因而失败:
one two three four five
因此,除非在编写代码之前确保有一定数量的字符串,否则scanf
将不起作用。 相反,与您最初的尝试一样,您选择strtok
将提供处理无限数量的单词的灵活性。
最初读取输入的唯一问题是选择"%s"
的scanf
文件说明符,当遇到第一个空格时转换停止。 如果仅将转换说明符更改为"%[^\\n]"
您将能够读取字符串中的所有单词,直到'\\n'
字符为止。 但是,在这种情况下, fgets
可以替代scanf
。 一个简单的例子是:
#include <stdio.h>
#include <string.h>
#define MAXC 256
int main (void) {
char buf[MAXC] = {0};
char *p = buf;
printf ("\n enter words: ");
fgets (buf, MAXC, stdin);
printf ("\n tokens:\n\n");
for (p = strtok (buf, " "); p; p = strtok (NULL, " \n"))
printf (" %s\n", p);
putchar ('\n');
return 0;
}
实施例/输出
$ ./bin/strtok_fgets
enter words: a quick brown fox jumps over the lazy dog.
tokens:
a
quick
brown
fox
jumps
over
the
lazy
dog.
如果要使用scanf
,则可以将上述fgets
替换为scanf ("%255[^\\n]", buf);
并完成同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.