我无法将整个输出打印成字符串。
我所知道的是%s应该像循环一样工作 例如 printf(“%s”,str); 与puts(str)相同;
#include <stdio.h>
#include <string.h>
int main (){
char str[]="Hello:, student; how are you? This task is easy!";
char *token;
char del[] = ", ; : ? !", cp[80];
int count;
strcpy(cp, str);
token = strtok(str, del);
count = 0;
while( token != NULL )
{
printf("%s\n", token);
token = strtok(NULL, del);
count++;
}
strtok(str, del);
printf("Your sentence has %d words\n", count);
puts("The sentence without punctuation charachters is: \n ");
puts(str); // This should where it show me the output
return 0 ;
}
//我试图遵循必须以这种形式编写此代码的说明。 //这是我想得到的输出
你好
学生
如何
是
你
此
任务
是
简单
您的句子有11个字 没有标点符号的句子是: 你好,学生好,你好吗
//我所能做的就是(忽略每个单词之间的多余行)
你好
学生
如何
是
你
此
任务
是
简单
您的句子有11个字 没有标点符号的句子是: 你好
答案 0 :(得分:0)
strtok(str, del);
修改了它的第一个参数,在其中添加了空字符,这就是为什么在调用 strtok 后打印 str 时,只有第一个标记< / p>
您使用strcpy(cp, str);
保存了字符串,但是您没有使用它,并且您也希望80足够了...
将文字放在 cp 中然后打印的提案:
#include <stdio.h>
#include <string.h>
int main (){
char str[]="Hello:, student; how are you? This task is easy!";
char *token;
char del[] = ", ; : ? !", cp[sizeof(str) + 1];
int count;
size_t pos = 0;
token = strtok(str, del);
count = 0;
while( token != NULL )
{
printf("%s\n", token);
strcpy(cp + pos, token);
pos += strlen(token);
cp[pos++] = ' ';
token = strtok(NULL, del);
count++;
}
cp[(pos == 0) ? 0 : (pos - 1)] = 0;
printf("Your sentence has %d words\n", count);
puts("The sentence without punctuation characters is:");
puts(cp); // This should where it show me the output
return 0 ;
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
Hello
student
how
are
you
This
task
is
easy
Your sentence has 9 words
The sentence without punctuation characters is:
Hello student how are you This task is easy
pi@raspberrypi:/tmp $