根据题解大神稍微改了一些些= =自己太菜了,一点点测试发现大写字母减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; }