zoukankan      html  css  js  c++  java
  • 杭电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],'',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]!=''&&art[i]!='
    ')          //将整个的单词存入缓冲
    			{
    				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,'',sizeof(buff));                 //重置缓冲数组,不然会干扰下次结果
    			}
    			if(art[i]=='')
    				break;
    		}
    		/*
    		for(int i=0;i<n;i++)
    			cout<<bank[i]<<endl;
    		*/
    		cout<<n<<endl;
    		//cout<<buff<<endl;
    	}
    }


  • 相关阅读:
    第61课 智能指针类模板
    第60课 数组类模板
    第59课 类模板深度剖析
    第58课 类模板的概念和意义
    第57课 深入理解函数模板
    第56课 函数模板的概念和意义
    第55课 经典问题解析(四)
    155. Min Stack
    141. Linked List Cycle
    136. Single Number
  • 原文地址:https://www.cnblogs.com/A-yes/p/9894242.html
Copyright © 2011-2022 走看看