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