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