题目:
在给定字符串中找出单词(“单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
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<string> #include<vector> #include<algorithm> using namespace std; bool myfunction (const string &str1,const string &str2){ return(str2.length()< str1.length()); } void my_word(char input[],char output[]){ vector<string> str; char*cur = input; char*p = input; int len; bool flag =false; //去除杂质,取单词 while(*p !='\0'){ if((*p >='a'&&*p <='z')||(*p >='A'&&*p <='Z')) p++; else{ len = p-cur; if(len >1){ string tmp(cur,len); for(int i=0;i<str.size();i++) if(tmp == str[i]) flag =true; if(flag !=true) str.push_back(tmp); } cur = p+1; p++; flag =false; } } len = p-cur; if(len >1){ string tmp(cur,len); for(int i=0;i<str.size();i++) if(tmp == str[i]) flag =true; if(flag !=true) str.push_back(tmp); } //sort sort(str.begin(),str.end(),myfunction); //拼接字符串 *output='\0'; int i; for(i=0;i<str.size()-1;i++){ strcpy(output+strlen(output),(str[i]+" ").c_str()); } strcpy(output+strlen(output),(str[i]).c_str()); cout<<output<<endl; } int main(){ char input[]="some ninja local buses, somes1234123drivers"; char output[500]; my_word(input, output); return 0; }
时间: 2024-10-17 09:36:46