/*
问题描述:
有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,
将此字符串中的元音字母挑选出来,存入另一个字符串中,
并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。
说明:
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<cstdlib>
#include<string.h>
#include<malloc.h>
using namespace std;
int compare_char(const void *a,const void *b)
{
return *(char *)a-*(char *)b;
}
int compare_int(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
bool isYuanyin(char ch)
{
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'
||ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U')
return true;
return false;
}
void sortVowel_v1 (char* input, char* output)
{
unsigned int i=0,j=0;
unsigned int len1=strlen(input);
for(i=0;i<len1;i++)
{
if(isYuanyin(input[i]))
output[j++]=input[i];
}
output[j]='\0';
cout<<output<<endl;
unsigned int len2=strlen(output);
/*可以用库函数快排搞定*/ /*
for(i=0;i<len2;i++)
{
//flag=false;
for(j=0;j<len2-1-i;j++)
if(output[j]>output[j+1])
{
char temp=output[j];
output[j]=output[j+1];
output[j+1]=temp;
}
}*/
qsort(output,len2,sizeof(output[0]),compare_char);
cout<<output<<endl;
char *output2=(char*)malloc(len2+1);
//以上对元音字母按照阿斯卡码进行排序,下边要把小写字母移到大写字母前边
for(i=0;i<len2;i++)
if('a'<=output[i])
{
j=i;//找到第一个小写字母,即大小写字母的分界线
break;
}
//下边的是本题目的关键
strcpy(output2,output+j);//把后半部分即小写字母复制到新串之中
output[j]='\0';//将原结果串从小写字母之后截断
strcat(output2,output);//把原串链接到新串后边
strcpy(output,output2);
cout<<output2<<endl;
}
void sortVowel_v2 (char* input, char* output)
{
char lit_ch[5] ={'a','e','i','o','u'};
char big_ch[5] ={'A','E','I','O','U'};
char lit_temp[100]={0},big_temp[100]={0};
int i;
char *p_lit = lit_temp,*p_big = big_temp;
while(*input) //遍历
{
for(i=0 ; i<5 ;i++)
{
if(*input == lit_ch[i])
*p_lit++ = *input;
if(*input == big_ch[i])
*p_big++ = *input;
}
input++;
}
*p_lit = '\0';
*p_big = '\0';
qsort(lit_temp,strlen(lit_temp),sizeof(lit_temp[0]),compare_char);
qsort(big_temp,strlen(big_temp),sizeof(big_temp[0]),compare_char);
strcat(lit_temp,big_temp);
strcpy(output,lit_temp);
}
int main()
{
char *input = "Abort!May Be Some Errors In Out System." ;
int len=strlen(input);
char *output=(char*)malloc(len*sizeof(char)+1);
sortVowel_v2(input,output);
cout<<"output is "<<output<<endl;
return 0;
}