根据题解大神稍微改了一些些= =自己太菜了,一点点测试发现大写字母减ascii码得不到小写字母QAQ,最后还是用了-('a'-'A')这种方式
返回的是字母的下标,所以空格和和非字母,还有相同字母的输入顺序一并解决。
比大小直接用冒泡排序加两个中间变量对比,中间变量换成相同的大小写字母,不改变原字符串字母。
膜拜上面题解的大神0.0,好好用

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
    string s;
    while(getline(cin,s)){
        vector <int> v;
        for(int i=0;i<s.length();i++){
            if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))v.push_back(i);
        }
        for(int i=0;i<v.size()-1;i++){
            for(int j=0;j<v.size()-i-1;j++){
                char t1=s[v[j]],
                t2=s[v[j+1]];
                if(t1>='a'&&t1<='z')t1=t1-'a'+'A';
                if(t2>='a'&&t1<='z')t2=t2-'a'+'A';
                if(t1>t2){
                    char tmp=s[v[j]];
                    s[v[j]]=s[v[j+1]];
                    s[v[j+1]]=tmp;
                }
            }
        }
        cout<<s<<endl;
    }
    return 0;
}