非字母的字符串排序后还是在原来的位置,所以先把字母全部提取出来排序,然后非字母的直接打印,
字母按新排序的打印。
#include"stdio.h"
#include"string.h"

char str[1001] = { 0 };
char tmp_str[1000] = { 0 };

int main(void) {
    int len, i, j, t=0, n, num = 0;
    fgets(str, sizeof(str), stdin);
    len = strlen(str);
    while (str[len - 1] == '\n' || str[len - 1] == '\r') {
        len--;
    }

    for(i='A';i<='Z';i++){
        for(j=0;j<len;j++){
            if(str[j] == i || str[j] == i + ('a'-'A')){
                tmp_str[t]=str[j];
//                printf("%c",str[j]);
                t++;
            }
        }
    }
    t=0;
//    printf("%c",'\n');
    for(i=0;i<len;i++){
        if(!((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))){
            printf("%c",str[i]); //不是字母直接打印
        }else{
            printf("%c",tmp_str[t]);  //字母按排序后的顺序替换。
            t++;
        }
    }
    return 0;
}