码迷,mamicode.com
首页 > 其他好文 > 详细

华为历年试题(5)

时间:2014-06-28 09:55:12      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   问题      name   

将一个字符串的元音字母复制到另一个字符串,并排序(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),布布扣,bubuko.com

华为历年试题(5)

标签:style   blog   color   问题      name   

原文地址:http://www.cnblogs.com/Xylophone/p/3810958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!