天天看点

将一个字符串的元音字母复制到另一个字符串并排序

/*
问题描述:
有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,
将此字符串中的元音字母挑选出来,存入另一个字符串中,
并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。
说明:
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;
}
           

继续阅读