题目描述:
输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(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:输出字符串,返回出现次数最少的单词,该指针所指存储空间已经分配好,且足够大
输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(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;
}