/***** HDOJ 2072 单词数 ********/
/找不同的单词,简单字符串题/
/****************************************************************************/
/*
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
you are my friend
#
4
*/
/*
解题思路:
1.储存在两个不同数组中,a[][]&b[],b[]中用来储存完整版字符串,a[][]储存对应单词,每行存一个单词;
2.每行与之后行中的单词进行比较,用到函数strcmp()*/
#include<stdio.h>
#include<string.h>
int main()
{
char b[100000],a[1000][100];
int len,k,j,i;
int num,flag;
while(gets(b)&&strcmp(b,"#")!=0)
{
i=0;
len=strlen(b);
k=0;
while(i<len)//遇到空格逐个判断,单词逐个存储
{
if(b[i]==' ')//直到读到不为空格的地方
{while(b[i]==' ') ++i;}
else
{
j=0;//这里的k是表示不同单词放置的位置,j只是过客~i在前面的while中判断是否读到结尾
while(b[i]!='\0'&&b[i]!=' ')
{
a[k][j++]=b[i++];
}
a[k][j]='\0';//单个单词读罢
++k;
}
}
num=0;
for(i=0;i<k;i++)
{
flag=0;
for(j=i+1;j<k;j++)
{
if(strcmp(a[i],a[j])==0)
flag=1;//后面加else也就是每一次都在和最后一个比啊白痴!
}
if(!flag)
num++;
}
printf("%d\n",num);
}
return 0;
}