长句拆单词

Problem : 1002

Time Limit : 1000ms

Memory Limit : 65536K

description

有一个用空格( )、逗号(,)或是句号(.)分隔的许多英文单词组成的字符串(分隔的空格可以是多个)。请编写程序将这些单词分开并输出。

要求,在main函数中完成数据的输入。在子函数中完成拆分单词及统计个数。
提示:可以将待拆分的字符串作为参数进行拆分。拆出的单词可以用指针数组分别指向,并可以在子函数中输出(这样就不必把用指向分出单词的指针数组作为参数了)。子函数返回拆出的单词的个数,个数可以在main中输出。

input

put
  输入的数据可以有多组,首先第一行输入一个整数n,接下来是n行,每行是用空格、逗号、句号分隔的字符串,字符串的长度少于1000个字符,拆出的单词的个数少于300个。

output

对于每组数据,首先 输出每行字符串分出的单词(分出的各个单词用空格分隔)。接下来输出分出的单词的个数。

sample_input

2
good a day
i am a
3
good morning. how are you, this is a desk
yellow blue red grey
hong se
1
   good you. ke   kkk   kkkkk            diek

sample_output

good a day
3
i am a
3
good morning how are you this is a desk
9
yellow blue red grey
4
hong se
2
good you ke kkk kkkkk diek
6


我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

     int fun(char *p)
{
    int len,sum=0,i,j,x=0,y=0,flag=1;
    len=strlen(p);
    for(i=0;i<len;i++)
    {
        if(flag==0&&(*(p+i)==' '||*(p+i)==','||*(p+i)=='.')&&(*(p+i-1)!=' '&&*(p+i-1)!=','&&*(p+i-1)!='.'))
       {
           y=i-1;
           sum++;
           flag=1;
          for(j=x;j<=y;j++)
            printf("%c",*(p+j));
            printf(" ");
       }
     if(flag==1)
    {
      if(*(p+i)!=' '&&*(p+i)!=','&&*(p+i)!='.')
        {
           x=i;
           flag=0;
        }
   }
 }

    if(*(p+i-1)!=' '&&*(p+i-1)!=','&&*(p+i-1)!='.')
    {
      sum++;
      y=len-1;
      for(j=x;j<=y;j++)
      printf("%c",*(p+j));
    }
   return sum;
}

int main()
{
    int n,sum;
    char a[30][1000];
    while(scanf("%d",&n)!=EOF)
   {
    getchar();
    int i;
    for(i=0;i<n;i++)
    gets(a[i]);
   for(i=0;i<n;i++)
     {
      sum=fun(a[i]);
      printf(" ");
      printf("%d ",sum);
     }
   }
return 0;
}

 
原文地址:https://www.cnblogs.com/chen9510/p/4435369.html