我正在使用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;
}
输入是一个字符串,例如&#39;这是一个字符串&#39;,我得到的输出是<<this>>
。
答案 0 :(得分:6)
您编写scanf
的方式只接受字符串直到空格
的scanf(&#34;%S&#34;,目标);
所以你需要改变从控制台输入输入的方式
scanf("%99[^\n]",target);
答案 1 :(得分:3)
更改:
<script type="text/javascript">
var dt = new Date('2016/12/10');
var month = dt.getMonth()+1;
var day = dt.getDate()-1;
var year = dt.getFullYear()+1;
alert(month + '-' + day + '-' + year);
</script>
为:
scanf("%s",target);
因为第一个在遇到输入中的空格时不会停止。
输出:
fgets(target, 100, stdin);
注意新行fgets()存储如何影响输出。如果你愿意,你可以简单地丢弃它,如下所示:
this is a string
<<this>>
<<is>>
<<a>>
<<string
>>
现在的输出是:
fgets(target, 100, stdin);
target[strlen(target) - 1] = '\0';
答案 2 :(得分:3)
如果您想继续使用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);
只会读取输入,直到第一个空格;这就是为什么你只得到第一个单词作为输出。通过撰写scanf("%99[0-9a-zA-Z ]", target);
,您可以从输入流中读取99个字符(包括数字0-9
,a-z
或A-Z
和空格)。
希望这有用。