首页 > 代码库 > 华为历年试题(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中。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。