如何打印不带标点的整个句子?

时间:2019-04-20 14:44:15

标签: c

我无法将整个输出打印成字符串。

我所知道的是%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个字 没有标点符号的句子是: 你好

1 个答案:

答案 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 $