#include <bits/stdc++.h> using namespace std; struct cc { char c; bool ischange; }; int main() { string s; while (getline(cin, s)) { vector<cc> v; cc ccc; //首先将输入的字符中的大小写字母存进v for (int i = 0; i < s.length(); i++) { if (islower(s[i]) || isupper(s[i])) { //判断一下是大写还是小写 //是小写,做个标记后转为大写 if (islower(s[i])) { ccc.c = char(s[i] - 'a' + 'A'); ccc.ischange = 1; //是从小写变成的大写 } //大写,正常处理 else { ccc.c = s[i]; ccc.ischange = 0; } v.push_back(ccc); } } //根据大写字母ascii码升序排序 stable_sort(v.begin(), v.end(), [](const cc & a, const cc & b) { return a.c < b.c; }); int index = 0; //再次扫描字符串 for (int i = 0; i < s.length(); i++) { if (islower(s[i]) || isupper(s[i])) { //如果是由小写变成大写的 if (v[index].ischange == 1) { cout << char(v[index].c - 'A' + 'a'); //转回小写 } else cout << v[index].c; index++; } else cout << s[i]; } cout << endl; } } // 64 位输出请用 printf("%lld")