• 杭电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;
    	}
    }


  • 相关阅读:
    高级同步器:交换器Exchanger
    高级同步器:同步屏障CyclicBarrier
    转:java中的定时任务
    spring事务配置,声明式事务管理和基于@Transactional注解的使用(转)
    深入研究Java类加载机制
    接口可以继承多个接口总结
    序列化和反序列化(转)
    tomcat常见错误及解决方案
    数据库连接池的实现及原理
    proxy是什么
  • 原文地址:https://www.cnblogs.com/A-yes/p/9894242.html
Copyright © 2020-2023  润新知