为什么 strtok 只打印第一个字?
Why is strtok printing only first word?
我正在使用 strtok 将 字符串 转换为 单个单词 。我做了以下事情:
int main() {
char target[100];
char *t;
scanf("%s",target);
t = strtok(target," ");
while (t!= NULL)
{
printf("<<%s>>\n", t);
t = strtok (NULL, " ");
}
return 0;
}
输入是字符串如'this is a string',我得到的输出是<<this>>
.
变化:
scanf("%s",target);
至:
fgets(target, 100, stdin);
因为第一个在遇到您输入的空格时不会停止。
输出:
this is a string
<<this>>
<<is>>
<<a>>
<<string
>>
注意换行符 fgets() 存储如何影响输出。如果你愿意,你可以简单地丢弃它,像这样:
fgets(target, 100, stdin);
target[strlen(target) - 1] = '[=13=]';
现在输出是:
this is a string
<<this>>
<<is>>
<<a>>
<<string>>
你写的方式 scanf
它只会接受字符串直到白色 space
scanf("%s",target);
所以您需要更改从控制台获取输入的方式
scanf("%99[^\n]",target);
如果您想继续使用scanf(),那么您可以使用下面的代码片段:
#include<stdio.h>
#include <string.h>
int main() {
char target[100];
char *t;
//scanf("%s",target);
scanf("%99[0-9a-zA-Z ]", target);
printf("%s\n",target);
t = strtok(target," ");
while (t!= NULL)
{
printf("<<%s>>\n", t);
t = strtok (NULL, " ");
}
return 0;
}
工作代码here.
只需写入 scanf("%s",target);
将只读取输入直到第一个白色 space;这就是为什么你只得到第一个词作为输出。通过写入 scanf("%99[0-9a-zA-Z ]", target);
,您将从输入流中读取 99 个字符(包括数字 0-9
、a-z
或 A-Z
和白色 space)。
希望对您有所帮助。
我正在使用 strtok 将 字符串 转换为 单个单词 。我做了以下事情:
int main() {
char target[100];
char *t;
scanf("%s",target);
t = strtok(target," ");
while (t!= NULL)
{
printf("<<%s>>\n", t);
t = strtok (NULL, " ");
}
return 0;
}
输入是字符串如'this is a string',我得到的输出是<<this>>
.
变化:
scanf("%s",target);
至:
fgets(target, 100, stdin);
因为第一个在遇到您输入的空格时不会停止。
输出:
this is a string
<<this>>
<<is>>
<<a>>
<<string
>>
注意换行符 fgets() 存储如何影响输出。如果你愿意,你可以简单地丢弃它,像这样:
fgets(target, 100, stdin);
target[strlen(target) - 1] = '[=13=]';
现在输出是:
this is a string
<<this>>
<<is>>
<<a>>
<<string>>
你写的方式 scanf
它只会接受字符串直到白色 space
scanf("%s",target);
所以您需要更改从控制台获取输入的方式
scanf("%99[^\n]",target);
如果您想继续使用scanf(),那么您可以使用下面的代码片段:
#include<stdio.h>
#include <string.h>
int main() {
char target[100];
char *t;
//scanf("%s",target);
scanf("%99[0-9a-zA-Z ]", target);
printf("%s\n",target);
t = strtok(target," ");
while (t!= NULL)
{
printf("<<%s>>\n", t);
t = strtok (NULL, " ");
}
return 0;
}
工作代码here.
只需写入 scanf("%s",target);
将只读取输入直到第一个白色 space;这就是为什么你只得到第一个词作为输出。通过写入 scanf("%99[0-9a-zA-Z ]", target);
,您将从输入流中读取 99 个字符(包括数字 0-9
、a-z
或 A-Z
和白色 space)。
希望对您有所帮助。