首页 > 代码库 > 华为历年试题(5)

华为历年试题(5)

将一个字符串的元音字母复制到另一个字符串,并排序(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中。