题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则1:英文字母从A到Z排列,不区分大小写。
如,输入:Type 输出:epTy
规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入:BabA 输出:aABb
规则3:非英文字母的其它字符保持原来的位置。
如,输入:By?e 输出:Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
用一个vector记录字符串中的字母,外循环用字母的顺序,内循环为字符串数
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 bool isupper(char ch) 6 { 7 if ( (ch >= 'A'&&ch <= 'Z')) 8 return true; 9 else 10 return false; 11 } 12 bool islower(char ch) 13 { 14 if(ch>='a'&&ch<='z') 15 return true; 16 else 17 return false; 18 } 19 20 int main() 21 { 22 string str; 23 while (getline(cin, str)) 24 { 25 int len = str.size(); 26 vector<char>vec; 27 for(int i=0;i<26;i++) 28 { 29 for(int j=0;j<len;j++) 30 { 31 if(str[j]-'a'==i ||str[j]-'A'==i) 32 vec.push_back(str[j]); 33 } 34 } 35 for(int j=0,k=0;j<len&&k<vec.size();j++) 36 { 37 if(isupper(str[j])|| islower(str[j])) 38 str[j]=vec[k++]; 39 } 40 41 42 43 44 cout << str << endl; 45 } 46 return 0; 47 }