字符串排序
描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :
英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type
输出: epTy
规则 2 :
同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA
输出: aABb
规则 3 :
非英文字母的其它字符保持原来的位置。
如,输入: By?e
输出: Be?y
注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)
数据范围:输入的字符串长度满足 1<=n<=100
输入描述:
输入字符串
输出描述:
输出字符串
示例1
输入:
A Famous Saying: Much Ado About Nothing (2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
string str="";
while(getline(cin,str)){
vector<char> vec1;
for(int i=0;i<26;++i){
for(int j=0;j<str.size();++j){
if((str[j]-'a'==i)||(str[j]-'A'==i)){
vec1.push_back(str[j]);
}
}
}
vector<pair<char,int>> vec2;
for(int i=0;i<str.size();++i){
if(str[i]>'z' || (str[i]<'a' && str[i]>'Z') || str[i]<'A'){
vec2.push_back({str[i],i});
}
}
int idex1=0; int idex2=0;
for(int i=0;i<str.size();++i){
if(idex2<vec2.size() && vec2[idex2].second==i){
cout<<vec2[idex2++].first;
}
else if(idex1<vec1.size()){
cout<<vec1[idex1++];
}
}
cout<<endl;
}
return 0;
}