c语言字符串改造题..

描述
一个字符串,存放在一个数组中,编程序将其改造之后输出:
(1)将S的所有第偶数个字符按照从大到小的次序放在S的后半部分;
(2)将S的所有第奇数个字符按照从小到大的次序放在S的前半部分;

格式
输入格式
输入一个字符串
字符串长度小于15

输出格式
输出改造后的字符串

样例
样例输入
ABCDEFGHIJKL
样例输出
ACEGIKLJHFDB

代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char buf[200],s1[100],s2[100];
    int i=0,j=0,k=0;
    int p,q;
    char ch;
    gets(buf);//读取一行字符串
    while (buf[i])
    {
        if(i%2==0)
            s1[j++] = buf[i]; //奇数位
        else
            s2[k++] = buf[i]; //偶数位
        i++;
    }
    s1[j] = 0;
    s2[k] = 0;

    //偶数位从大到小排序
    for (p=0;p<k-1;p++)
    {
        for (q=0;q<k-1-p;q++)
        {
            if(s2[q] < s2[q+1])
            {
                ch = s2[q];
                s2[q]=s2[q+1];
                s2[q+1]=ch;
            }
        }
    }

    //奇数位从小到大排序
    for (p=0;p<j-1;p++)
    {
        for (q=0;q<j-1-p;q++)
        {
            if(s1[q] > s1[q+1])
            {
                ch = s1[q];
                s1[q]=s1[q+1];
                s1[q+1]=ch;
            }
        }
    }
    
    memset(buf,0,200);
    strcpy(buf,s1);
    strcat(buf,s2);

    printf("%s",buf);
    return 0;
}

思路:
定义3个数组,把数组的奇数部分,偶数部分分别放在2个数组,排好序后再返回原来的数组。

#include <stdio.h>
 
 //从小到大排序
void sort1(char* p,int n)
{
    int i,j;
    char ch;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if(*(p+j) > *(p+j+1))
            {
                ch = *(p+j);
                *(p+j) = *(p+j+1);
                *(p+j+1) = ch;
            }
        }
    }
}
//从大到小排序
void sort2(char* p,int n)
{
    int i,j;
    char ch;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if(*(p+j) < *(p+j+1))
            {
                ch = *(p+j);
                *(p+j) = *(p+j+1);
                *(p+j+1) = ch;
            }
        }
    }
}
 
 
int main()
{
    char a[30]={'\0'};
    char b1[15]={'\0'};
    char b2[15]={'\0'};
    int i,cnt = 0,cnt1=0,cnt2=0;
    gets(a);
    while(a[cnt]!='\0'){
        if(cnt % 2==0)
            b1[cnt1++]=a[cnt];
        else
            b2[cnt2++]=a[cnt];
        cnt++;
    }
    sort2(b1,cnt1);
    sort1(b2,cnt2);
    for(i=0;i<cnt1;i++){
        a[i] = b1[i];
    }
    for(i=cnt1;i<cnt1+cnt2;i++){
        a[i] = b2[i-cnt1];
    }
    printf("%s",a);
    return 0;
}