您的位置:首页 > 其它

HDU 2072 单词数

2015-07-23 10:50 393 查看

                  单词

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

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

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

[align=left]Sample Input[/align]

you are my friend
#

[align=left]Sample Output[/align]

4

代码:
第一种方法:strtok函数和指针数组实现

#include<stdio.h>
#include<string.h>
int main()
{
int i,j,t,sum,k;
char *v[100];
char s[1000];
int b[100];
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;
}


第二种方法:用set实现

#include<set>
#include<string>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int main()
{
//freopen("in.txt","r",stdin);
int i,j;
char temp[2005];
char s[2005];
string sub;
while(gets(s)&&strcmp(s,"#")!=0)
{
set<string>S;
int len=strlen(s);
s[len]=' ';
s[++len]='\0';
for(i=0;i<len;i++)
if(s[i]!=' ')break;
for(j=0;i<len;i++)
{
if(s[i]==' ')
{
if(s[i+1]==' ')continue;
temp[j]='\0';
j=0;
sub=temp;
S.insert(sub);
continue;
}
temp[j++]=s[i];
}
int ans=S.size();
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: