华为机试——将一个字符串的元音字母复制到另一个字符串,并排序

来源:互联网 发布:淘宝买管制刀具 编辑:程序博客网 时间:2024/05/01 11:18
将一个字符串的元音字母复制到另一个字符串,并排序
问题描述: 
有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。 
  
说明: 
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 =“aeeeooAEIO */  
#include<iostream>
#include<cctype>
#include<string>
using namespace std;


void sortVowel(char* input,char* output)
{
char Vowel1[26]={0};
char Vowel2[26]={0};
char Vowela[5]={'a','o','e','i','u'};
char VowelA[5]={'A','O','E','I','U'};
int len=strlen(input);
int j=0;
for(int i=0;i<len;i++)
// if(input[i]=='a'||input[i]=='A'||input[i]=='o'||input[i]=='O'||
// input[i]=='i'||input[i]=='I'||input[i]=='e'||input[i]=='E'||input[i]=='u'||input[i]=='U')
{
for(int k=0;k<5;k++)
if(input[i]==Vowela[k])
Vowel1[Vowela[k]-'a']++;
for(int k=0;k<5;k++)
if(input[i]==VowelA[k])
Vowel2[Vowela[k]-'a']++;
}
for(int i=0;i<26;i++)
for(int k=0;k<Vowel1[i];k++)
output[j++]=i+'a';
for(int i=0;i<26;i++)
for(int k=0;k<Vowel2[i];k++)
output[j++]=i+'A';
output[j]='\0';


}
void sortVowel2(char* input,char* output) //这个实现方法更好
{
char arr[10]={'a','e','i','o','u','A','E','I','O','U'};
int num[10]={0};
int i=0;
while(*input!='\0')
{
for(i=0;i<10;i++)
if(*input==arr[i])
{
num[i]++;
break;
}
input++;
}
for(i=0;i<10;i++)
{
while(num[i]--)
*output++=arr[i];
}
*output='\0';

}
int main()
{
char str[100],output1[100],output2[100];
cin.get(str,100);
sortVowel(str,output1);
cout<<output1<<endl;
sortVowel2(str,output2);
cout<<output2<<endl;
}
0 0
原创粉丝点击