华为2013年 机考 单词统计

题目描述:
输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z)
单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.);
仅大小写不同的单词算同一个单词;
如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。
返回的单词统一用小写字母返回
例如:
输入字符串“Hello world, i said hello world to the world”,返回“world”,“i”
输入字符串“Somebody like somebody,i do not like it”,返回“somebody”,“i”
要求实现函数:
void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord);
【输入】 pInputStr: 输入字符串,指向一段英文文本
【输出】 pOutputHotWord: 输出字符串,返回出现次数最多的单词,该指针所指存储空间已经分配好,且足够大
pOutputColdWord:输出字符串,返回出现次数最少的单词,该指针所指存储空间已经分配好,且足够大

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出


#include<iostream>
#include<iomanip>
#include<string>
#include<cstring>
#include<sstream>
using namespace std;

int main()
{
	void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord);
	const char * pInputStr="Hello world,i said hello world to the world";
	char *pOutputHotWord=new char[100];
	char *pOutputColdWord=new char[100];
	WordStat(pInputStr,pOutputHotWord,pOutputColdWord);
	cout<<pOutputHotWord<<","<<pOutputColdWord<<endl;
	return 0;
}

void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord)
{
	string text[1000];//存放文本中提取出的全部单词,无重复单词
	long worldNum[1000]={0};//存放text中对应单词的个数
	long count=0;
	long textLen=strlen(pInputStr);
	for(long i=0;i<textLen;i++)
	{
			string world="";
			while(!(pInputStr[i]==' ' || pInputStr[i]==',' || pInputStr[i]=='.') && i<textLen) //提取单词
			{
				world=world+pInputStr[i];
				i++;
			}

			bool exist=false;
			int k=0;
			for(;k<count;k++) //检查单词是否有重复
			{
				if(world.length()==text[k].length())
				{
					int c=0;
					for(;c<world.length();c++)
					{
						if(world[c]>='A'&&world[c]<='Z'){world[c]=char(world[c]+32);} //大写全部转小写
						if(text[k][c]>='A'&&text[k][c]<='Z'){text[k][c]=char(text[k][c]+32);}
						if(world[c]!=text[k][c])
						{
							break;
						}
					}
					if(c==world.length())
					{
						exist=true;
						break;
					}
				}
			}
			if(exist) //如果提取出的单词text中已经添加过,则仅将相应单词个数+1;
			{
				worldNum[k]++;
			}else //如果提取出的单词text中未曾添加过,则将此单词添加到text中,并且相应单词个数因为1;
			{
				text[count]=world;
				worldNum[count]=1;
				count++;
			}
	}
 
	long max=0,min=0;
	for(int w=0;w<count;w++)  //查找出现的最多和最少的单词在text中的位置;
	{
		if(worldNum[w]>worldNum[max]){max=w;}
		if(worldNum[w]<worldNum[min]){min=w;}
	}
	stringstream sstr,sstr2;
	sstr<<text[max];
	sstr>>pOutputHotWord;
	sstr2<<text[min];
	sstr2>>pOutputColdWord;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值