单词数
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
HDU 2072
Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
方法一:将每个单词都分离出来,然后进行比较,找出不同单词的个数
/*AC*/
#include<stdio.h>
#include<string.h>
int main()
{
char s[100100],w[100][100];
while (gets(s))
{
if (s[0]=='#')
break;
int lens,i,j,k,n=0;
int mark[100]={0};
lens=strlen(s);
for (i=0;i<lens;i++)
{
if (s[i]==' ')
continue;
k=0;
for (j=i;j<lens;j++)
{
if (s[j]!=' ')
w[n][k++]=s[j];
else
break;
}
i=j;
w[n][k]='\0';
n++;
}
int r=0;
for (i=0;i<n-1;i++)
{
for (j=i+1;j<n;j++)
{
if (strcmp(w[i],w[j])==0&&!mark[i])
{
mark[j]=1;
r++;
}
}
}
printf("%d\n",n-r);
}
return 0;
}
方法二:用c++STL的set容器
#include<set>
#include<string>
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string s;
while (getline(cin,s))
{
set<string> m;
if (s=="#")
break;
stringstream stream;
stream<<s; //将string字符串读入流中
while (stream>>s)
m.insert(s);
cout<<m.size()<<endl;
}
return 0;
}