HDU 2072 单词数

                  单词

Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 
Sample Input
you are my friend
#
 
Sample Output
4
 
代码:
第一种方法:strtok函数和指针数组实现
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int i,j,t,sum,k;
 6     char *v[100];
 7     char s[1000];
 8     int b[100];
 9     while(gets(s))
10     {
11         memset(b,1,sizeof(b));
12         if(s[0]=='#')
13         break;
14         i=0;
15         v[i]=strtok(s," ");
16         while(v[i])
17         {
18             i++;
19             v[i]=strtok(NULL," ");
20         }
21         for(j=0;j<i-1;j++)
22         for(t=j+1;t<i;t++)
23         if(strcmp(v[j],v[t])==0)
24         b[t]=0;
25         for(sum=0,k=0;k<i;k++)
26         if(b[k])
27         sum++;
28         printf("%d
",sum);
29     }
30     return 0;
31 }

第二种方法:用set实现

 1 #include<set>
 2 #include<string>
 3 #include<iostream>
 4 #include<cstdio>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     //freopen("in.txt","r",stdin);
11     int i,j;
12     char temp[2005];
13     char s[2005];
14     string sub;
15     while(gets(s)&&strcmp(s,"#")!=0)
16     {
17         set<string>S;
18         int len=strlen(s);
19         s[len]=' ';
20         s[++len]='';
21         for(i=0;i<len;i++)
22         if(s[i]!=' ')break;
23         for(j=0;i<len;i++)
24         {
25             if(s[i]==' ')
26             {
27                 if(s[i+1]==' ')continue;
28                 temp[j]='';
29                 j=0;
30                 sub=temp;
31                 S.insert(sub);
32                 continue;
33             }
34             temp[j++]=s[i];    
35         }
36         int ans=S.size();
37         cout<<ans<<endl;
38     }
39     return 0;
40 }
 
原文地址:https://www.cnblogs.com/homura/p/4669765.html