思路: 1、因为排序不能区分大小写字母。所以用循环的方式,从(A/a到Z/z)一个一个做判断,保存到另一个字符数组str_sort中 2、循环输入的字符串,如果是字母,就用str_sort数组中的数据替换,然后输出。

#include <stdio.h>

#define DIFF ('a'-'A')

int main()
{
    char str[1000] = {0};
    gets(str);
    int len = strlen(str);
    char str_sort[len];
    int index = 0;
    memset(str_sort, 0, len);
    for(int i = 'A'; i <= 'Z'; i++)
    {
        for(int j = 0; j < len; j++)
        {
            if(str[j] == i ||
              (str[j] - DIFF == i && str[j] >= 'a' && str[j] <= 'z'))
            {
                str_sort[index++] = str[j];
            }
        }
    }
#if 0
    /* 打印str_sort */
    printf("index:[%d], str_sort = [%s]\n", index, str_sort);
#endif
    index = 0;
    for(int i = 0; i < len; i++)
    {
        if(str[i] >= 'A' && str[i] <= 'Z'
           || str[i] >= 'a' && str[i] <= 'z')
        {
            str[i] = str_sort[index++];
        }
        printf("%c", str[i]);
    }
    printf("\n");
    return 0;
}