#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char a; int tag; } str; void bubble_sort(str a[], int n) { int i, j = 0; str temp; for (i = 0; i < n; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j].a > a[j + 1].a) { temp = a[j + 1]; a[j + 1] = a[j]; a[j] = temp; } } } } int main() { char* str_1 = (char*)malloc(sizeof(char) * 1000); while (gets(str_1) != NULL) { int N = 'a' -'A'; int n = 0; n=strlen(str_1); //printf("%d\n",n); str str_2[n]; int count = 0, j = 0; for (int i = 0; i < n; i++) { j = i - count; if (str_1[i] >= 'A' && str_1[i] <= 'Z' ) { str_2[j].a = str_1[i]; str_2[j].tag = 0; } else if (str_1[i] >= 'a' && str_1[i] <= 'z') { str_2[j].a = str_1[i] - N; str_2[j].tag = 1; } else { count++; } } int n2 = n - count; //printf("%d\n",n2); bubble_sort(str_2, n2); count = 0; j = 0; for (int i = 0; i < n; i++) { j = i - count; if (str_1[i] >= 'A' && str_1[i] <= 'Z' || str_1[i] >= 'a' && str_1[i] <= 'z') { if (str_2[j].tag == 0) { str_1[i] = str_2[j].a; } else if (str_2[j].tag == 1) { str_1[i] = str_2[j].a + N; } } else { count++; } } printf("%s", str_1); } }