杭电OJ-2072_单词数

单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 36915    Accepted Submission(s): 8977


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

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

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

Sample Input
you are my friend #
 

Sample Output
4 思路: 将一行字符按单词截开存入而为数组,要注意缓冲数组的重置不然会因为上次输入的单词长度大于本次的长度而出错 代码:
#include<iostream>
#include<cstring>
using namespace std;
char bank[256][256];
char art[10000];
char buff[256];
int main()
{
	while(cin.getline(art,sizeof(art)))
	{
		int n=0;
		for(int i=0;i<256;i++)
		 memset(bank[i],'\0',sizeof(bank[i]));         
		if(strcmp(art,"#")==0) break;
		for(int i=0,j=0;;i++,j++)
		{
			//cout<<"art["<<i<<"]"<<art[i]<<"  j:"<<j<<endl;
			if(art[i]!=' '&&art[i]!='\0'&&art[i]!='\n')          //将整个的单词存入缓冲
			{
				buff[j]=art[i];
			}
			else
			{
				j=-1;
				int y=n;
				bool sign=true;
				for(int x=0;x<=y;x++)                            //判断缓冲中的单词有没有出现过
				{
					if(strcmp(bank[x],buff)==0)
					{
						sign=false;
						break;
					}
				}
				if(sign)
				{
					strcpy(bank[n],buff);
					n++;
				}
				memset(buff,'\0',sizeof(buff));                 //重置缓冲数组,不然会干扰下次结果
			}
			if(art[i]=='\0')
				break;
		}
		/*
		for(int i=0;i<n;i++)
			cout<<bank[i]<<endl;
		*/
		cout<<n<<endl;
		//cout<<buff<<endl;
	}
}


posted @ 2015-09-03 20:11  A_yes  阅读(317)  评论(0编辑  收藏  举报