Hdu 2072 单词数【字符串】

来源:互联网 发布:淘宝 购物 编辑:程序博客网 时间:2024/06/05 18:39

单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 36237    Accepted Submission(s): 8764


Problem Description

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input

有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。

Output

每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。

Sample Input

you are my friend#

Sample Output

4

方法比较笨:

用循环判断,把每个单词都从字符串里分离出来,存到一个字符数组里面,然后排序,然后统计求得不同的单词数。


这样做比较坑的一个地方是,如果全部是空格,单词数是0,不是1,所以需要特殊判断一下,这个题这样做,的确有点复杂...


#include<stdio.h>#include<string.h>void swep(char a[],char b[]){char c[1005];strcpy(c,a);strcpy(a,b);strcpy(b,c);}int main(){char x[1005],y[1005][1005];int i,j,c,len,n;while(gets(x)){len=strlen(x);if(strcmp(x,"#")==0){break;}j=n=c=0;memset(y,0,sizeof(y));for(i=0;i<len;i=i+j+1){j=0;if(i+j<len&&x[i+j]!=' '){for(j=0;x[i+j]!=' '&&i+j<len;++j){y[n][j]=x[i+j];}++n;}}for(i=0;i<n;++i){for(j=0;j<n;++j){if(strcmp(y[i],y[j])>0){swep(y[i],y[j]);}}}for(i=1;i<n;++i){if(strcmp(y[i-1],y[i])!=0){++c;}}if(n==0){c=0;}else{++c;}printf("%d\n",c);}return 0;}

有一种直接调用库函数的方法,把所有的单词裂解出来,然后实现统计.......


#include<stdio.h>#include<string.h>int main(){    int i,j,t,sum,k,b[100];    char *v[1005],s[1005];//开了一个指针数组,相当于一个二维数组    while(gets(s))    {        memset(b,1,sizeof(b));        if(s[0]=='#')        {            break;        }        i=0;v[i]=strtok(s," ");//这个函数返回的是指针,所以开的是指针数组        while(v[i])        {            i++;            v[i]=strtok(NULL," ");        }        for(j=0;j<i-1;j++)//循环除去相同的        {            for(t=j+1;t<i;t++)            {                if(strcmp(v[j],v[t])==0)                {                    b[t]=0;                }            }        }        for(sum=0,k=0;k<i;k++)//统计个数....        {            if(b[k])            {                sum++;            }        }          printf("%d\n",sum);    }    return 0;}



好几个月了,再次做这道题,结果还是被坑了好几次,最后还是用保险的方法去统计的.....

本来以为自己还会点东西,结果发现,原来真的只会一点.....


把大神给的测试数据贡献一下.....

  asdf as aasdf   asdf    #
(相信你的眼睛,那有一行空格.....)

/*2015年1月15日13:39  */#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char s[1005];bool friend operator < (node a,node b){return strcmp(a.s,b.s)>0;}}x[1005];int main(){char s[1005];//freopen("shuju.txt","r",stdin);while(gets(s),s[0]!='#'){memset(x,0,sizeof(x));int cnt=0,tp=0,len=strlen(s);for(int i=0;i<len;++i){if(s[i]==' '){continue;}while(i<len&&s[i]!=' '){x[cnt].s[tp++]=s[i++];}++cnt;tp=0;}sort(x,x+cnt);int ans=0;for(int i=0;i<cnt;++i){if(!i||strcmp(x[i-1].s,x[i].s)!=0){++ans;}}printf("%d\n",ans);}return 0;}



0 0
原创粉丝点击