#include <bits/stdc++.h> using namespace std; //思路:1、分割字符串:遇到非英文的其他字符则分割;2、把子字符串放入set容器自动排序 //思路:开辟一个26长度的数组空间表示26位字母出现次数;从头开始遍历即实现按顺序输出;将字母按顺序存入之后即可直接替换原字符串。 int main() { string s; vector<char> vec; getline(cin,s); for(int i=0;i<26;i++){//i从A开始遍历26个字母,即在字符串中从a/A开始找,如果找到的话则放入vec for(int j=0;j<s.length();j++){//从字符串的开头开始找到末尾,即使字母相同也可以按顺序存放 if(s[j]-'a'==i||s[j]-'A'==i){//字符-‘a’即为小写字母的ASCII码,字符-'A'为大写字母的Ascii码 vec.push_back(s[j]); } } } int j=0; for(int i=0;i<s.length();i++){ if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')) s[i]=vec[j++];//如果是字母的话,则替换vec中排好顺序的字符,其他不变 } cout<<s; } // 64 位输出请用 printf("%lld")