将一个字符串的元音字母复制到另一个字符串,并排序(30分)
问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,
将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序
(小写的元音字母在前,大写的元音字母在后,依次有序)。
说明:1、 元音字母是a,e,i,o,u,A,E,I,O,U。
2、 筛选出来的元音字母,不需要剔重;最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。
要求实现函数:void sortVowel (char* input, char* output);
【输入】 char* input,表示输入的字符串
【输出】 char* output,排好序之后的元音字符串。
【返回】 无示例
输入:char *input = “Abort!May Be Some Errors In Out System. “输出:char *output =“aeeeooouAEIO “
#include<map> #include<string> using namespace std; void sortVowel (char* input, char* output) { map<char,int> ao,AO; unsigned j=0; for(unsigned i=0;i<strlen(input);i++) { if(input[i]==‘a‘||input[i]==‘o‘||input[i]==‘e‘||input[i]==‘i‘||input[i]==‘u‘) ao[input[i]]++; if(input[i]==‘A‘||input[i]==‘O‘||input[i]==‘E‘||input[i]==‘I‘||input[i]==‘U‘) AO[input[i]]++; } for(map<char,int>::iterator iter=ao.begin();iter!=ao.end();iter++) { int l = iter->second; while(l) { output[j++]=iter->first; l--; } } for(map<char,int>::iterator iter1=AO.begin();iter1!=AO.end();iter1++) { int l0 = iter1->second; while(l0) { output[j++]=iter1->first; l0--; } } output[j]=‘\0‘;//字符串的题一定不要忘了后面加‘\0‘ } void main() { char* input= "Abort!May Be Some Errors In Out System. "; char output[100]; sortVowel (input, output); puts(output); }
分析:这个题用map的键自动排序思想正好,map<char,int>,int记录每个字符出现的次数,正好键值char按大小排序,
只是大写字母排在小写字母前不符合题目要求,所以用了两个map来分别记录,然后把结果写到output中。
原文地址:http://www.cnblogs.com/Xylophone/p/3810958.html