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]='\0';cout<<output<<endl;return;}
int i;
for(i=0;i!=re.size()-1;i++)
output[i]=re[i];
output[i]='\0';
cout<<output<<endl;
}
int main()
{
char input[]="some local buses, some1234123drivers";
char output[1000];
my_word(input,output);
}

浙公网安备 33010602011771号