您的位置:首页 > 其它

华为上机题目

2014-08-26 18:39 183 查看
/*15.在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,

其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);

找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列)

,然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;

如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个”空格”隔开,

最后一个单词后不加空格。

  要求实现函数:

  void my_word(charinput[], char output[])

  【输入】 char input[], 输入的字符串

  【输出】 char output[],输出的字符串

  【返回】无

*/

#include<iostream>

#include<string>

#include<map>

using namespace std;

void my_word(char *input,char *output)

{

map<string,int>word_cnt;

int len=strlen(input);

string s;

int t;

for(int i=0;i<len;)

{

t=i;

s.clear();

while((t<len)&&(input[t]>='a'&&input[t]<='z')||(input[t]>='A'&&input[t]<='Z'))

{ s.append(1,input[t]); t++;}

if((s.size()>1)&&(word_cnt.find(s)==word_cnt.end()))

word_cnt.insert(make_pair(s,s.size()));

while((t<len)&&!(input[t]>='a'&&input[t]<='z')||(input[t]>='A'&&input[t]<='Z'))

t++;

i=t;

}

if(word_cnt.size()==0)

{ strcpy(output,"");return;}



//采用选择排序法遍历

map<string,int>::iterator it=word_cnt.begin(),iter,des;

string out;

for(int time=0;time<word_cnt.size();time++)

{

it=word_cnt.begin();

int max=it->second;

des=it;

for(iter=++it;iter!=word_cnt.end();iter++)

{



if(iter->second>max)

{ max=iter->second;des=iter;}

}

if(time<word_cnt.size()-1)

out.append((des->first)+" ");

else

out.append(des->first);

des->second=0;



}

strcpy(output,const_cast<char *>(out.c_str()));

}

void main()

{

char input[]="%A^123 t 3453i*()s";

char *output=new char[strlen(input)+1];

my_word(input,output);

cout<<input<<endl<<output;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: