#include <cctype> #include <iostream> #include <string> using namespace std; void merge(string& letter, int lo, int mid, int hi){ string temp = letter; auto less = [](char a, char b)-> bool{ return tolower(a) <= tolower(b); }; int i = lo,j = mid + 1; for(int x = lo; x <= hi; x++){ if(i == mid + 1){ letter[x] = temp[j++]; } else if(j == hi + 1){ letter[x] = temp[i++]; } else if(less(temp[i], temp[j])){ letter[x] = temp[i++]; } else { letter[x] = temp[j++]; } } } void sort_string(string& letter, int lo, int hi){ if(lo >= hi) return; int mid = (lo + hi) >> 1; sort_string(letter, lo, mid); sort_string(letter, mid + 1, hi); merge(letter, lo, mid, hi); } int main() { string str; while (getline(cin, str)) { // 注意 while 处理多个 case string letter; for(char c: str){ if(isalpha(c)){ letter += c; } } sort_string(letter, 0, letter.size() - 1); int i = 0, j = 0; string ans; while(j < str.size()){ if(isalpha(str[j]) && i < letter.size()){ ans += letter[i++]; } else { ans += str[j]; } j++; } cout << ans; } } // 64 位输出请用 printf("%lld") // Bey // By?e // Be?y
稳定归并