解题思路:
(1)保存字母并排序
(2)将非字母按顺序插入
#include<iostream>
#include<cctype>
#include<utility>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main() {
string str;
while(getline(cin,str)) {
vector<pair<char,int>> v1,v2;
for(int i=0;i<str.length();i++) {
if(isalpha(str[i])) v1.push_back(pair(str[i],i));
else v2.push_back(pair(str[i],i));
}
auto comp=[&](const pair<char,int> &a,const pair<char,int> &b) {
if(tolower(a.first)<tolower(b.first)) return true;
else if(tolower(a.first)>tolower(b.first)) return false;
else if(a.second<b.second) return true;
else return false;
};
sort(v1.begin(),v1.end(),comp);
string s="";
for(int i=0;i<v1.size();i++) {
s+=v1[i].first;
}
for(int i=0;i<v2.size();i++) {
s.insert(v2[i].second,1,v2[i].first);
}
cout<<s<<endl;
}
return 0;
}