您的位置:首页 > 其它

hdoj2072 单词数 (set 和 map 两种做法)

2013-10-29 18:44 316 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2072


单词数

Problem Description

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

Input

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

Output

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

Sample Input

you are my friend
#


Sample Output

4


用set去重,注意字符串最后可能是空格,全串也可能只含空格。

#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include <iostream>
using namespace std;
char s[1000009],ss[1000009];
int main()
{
int i,c,len;
while(gets(s)&&s[0]!='#')
{
set<string > t;
c=0;
len=strlen(s);
while(len&&s[len-1]==' ')
len--;
s[len]=0;
if(len==0)
{
printf("0\n");
continue;
}
for(i=0;s[i];i++)
if(s[i]!=' ')ss[c++]=s[i];
else
if(c>0)
{
ss[c]=0;
t.insert(ss);
c=0;
}
set<string >::iterator te=t.begin();
if( c>0)
{
ss[c]=0;
t.insert(ss);
}
cout<<t.size()<<endl;
}
return 0;
}


用map直接映射求大小即可;

#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include <iostream>
using namespace std;
char s[1000009],ss[1000009];
int main()
{
int i,c,len;
while(gets(s)&&s[0]!='#')
{
map<string,int > t;
c=0;
len=strlen(s);
while(len&&s[len-1]==' ')
len--;
s[len]=0;
if(len==0)
{
printf("0\n");
continue;
}
for(i=0;s[i];i++)
if(s[i]!=' ')ss[c++]=s[i];
else
if(c>0)
{
ss[c]=0;
t[ss]=1;
c=0;
}
if( c>0)
{
ss[c]=0;
t[ss]=1;
}
cout<<t.size()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: