2013华为招聘上机--- 字符串处理转换

问题描述:    
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
void my_word(charinput[], char output[])
【输入】  char input[], 输入的字符串
【输出】  char output[],输出的字符串
【返回】 无


示例
输入:charinput[]="some local buses, some1234123drivers" ,
输出:charoutput[]="drivers local buses some"
输入:charinput[]="%A^123 t 3453i*()" ,

输出:charoutput[]=""


#include <iostream>
#include <cstring>
#include <string>
#include <sstream>
#include <cctype>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string a,string b){
		return a.size()>b.size();
		
}
void my_word(char input[], char output[])
{
	string s(input);
	for(int i=0;i!=s.size();i++)
	{
		if( !(s[i]>='a'&&s[i]<='z' || s[i]>='A'&&s[i]<='Z') )
			s[i]=' ';
	}
	stringstream ss(s);
	string tmp;
	vector<string> vec;
	while(ss>>tmp)
	{
		if(tmp.size()!=1)
			vec.push_back(tmp);
	}
	stable_sort(vec.begin(),vec.end(),cmp);
	vector<string>::iterator ite=unique(vec.begin(),vec.end()); 
	string re="";
	for(vector<string>::iterator it=vec.begin();it!=ite;it++)
	{
		re+=*it;
		re+=" ";
	}
	if(re.size()==0){output[0]='';cout<<output<<endl;return;}
	int i;
	for(i=0;i!=re.size()-1;i++)
		output[i]=re[i];
	output[i]='';	
	cout<<output<<endl;
	
}
int main()
{
	
	char input[]="some local buses, some1234123drivers";
	char output[1000];
	my_word(input,output);
	
}


原文地址:https://www.cnblogs.com/dyllove98/p/3220241.html