Hdu 2072 - 单词数

字符串

 

输入一行由小写字母和空格组成的句子,计算相同单词的个数。

需要注意的几点:

1)  如果一行句子只有空格,则有0个单词。

2)  如果一行句子由空格开头,不能算作单词个数。

3)  如果两个单词之间有n个空格隔开,不能算作单词个数。

4)  如果句子由n个空格结尾,不能算作单词个数。

5)  相同的单词的个数只是一个。

 

 

AC代码:

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main ()
{
   char *c = NULL,*d = NULL;
   char a[81];
   char b[41][81];
   int i,j,k,len,count,cnt;
   while(gets(a))
   {
       if(a[0] == '#') break;
       len = strlen(a);
       cnt = 0;
       for(i=0; i<len; i++)    //特殊情况,只由空格组成的句子
       {
           if(a[i] == ' ')
               cnt++;
       }
       if(cnt == len)
       {
           printf("0\n");
           continue;
       }
       for(i=len-1; i>=0; i--)  //最后的空格,去掉
       {
           if(a[i] == ' ')
               a[i] = NULL;
           else
               break;
       }
       len = strlen(a);
       for(i=0; i<len; i++) //开始的空格,去掉
       {
           if(a[i] == ' ')
               a[i]=NULL;
           else
           {
               d = a+i;
               break;
           }
       }
       len = strlen(d);    //中间的空格,赋NULL,并记录单词
       d[len] = ' ';
       d[len+1] = NULL;
       c = d;
       j = 0;
       for(i=0; i<=len; i++)
       {
           if(d[i] == ' ')
           {
               d[i] = NULL;

               if(d[i+1] != ' ')
               {
                   strcpy(b[j], c);
                   j++;
                   c = d+i+1;
               }
           }
       }
       count = j;       //处理单词,相同的记一次
       for(i=0; i<j; i++)
       {
           for(k=i+1; k<j; k++)
           {
               if(strcmp(b[i], b[k])==0 && b[k][0]!='$')
               {
                   count--;
                   b[k][0] = '$';    //$是标志,表示该相同单词已被减过,不能再减
               }
           }
       }
       printf("%d\n", count);
   }
   return 0;
}

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值