#include <iostream> using namespace std; #include <string> #include <map> #include <cctype> #include <queue> int main() { string str; getline(cin, str); queue<char> out; map<char, queue<char>> letterMap; char l; for (char i : str) { if (isalpha(i)) { out.push('a'); l = tolower(i); (letterMap[l]).push(i); } else { out.push(i); } } queue<char> lQ; for (auto& it : letterMap){ while(!it.second.empty()){ lQ.push(it.second.front()); it.second.pop(); } } while(!out.empty()){ if(out.front() == 'a'){ cout << lQ.front(); lQ.pop(); out.pop(); } else{ cout << out.front(); out.pop(); } } }
cctye将字母大小写统一方便存在map中,使用队列来保持输出顺序,用一个队列记录字母类型和非字母的顺序,一个队列记录所有字母的大小写顺序就完成了