题目描述 编写一个程序,将输入字符串中的字符按如下规则排序。 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 如,输入: Type 输出: epTy 规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入: BabA 输出: aABb 规则 3 :非英文字母的其它字符保持原来的位置。 如,输入: By?e 输出: Be?y 注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)
输入描述: 输入字符串 输出描述: 输出字符串
示例1 输入 A Famous Saying: Much Ado About Nothing (2012/8). 输出 A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
结果
思路:先把大小写字母按照题目排序的要求存到vector,然后从新遍历这一行的字符串,把字母的位置按照vector顺序修改,注意有多行,需要用getline(cin, s)
#include <bits/stdc++.h> using namespace std; int main() { string s; while(getline(cin, s)) { vector<char> v; int len = s.size(); for(int i = 0; i < 26; ++i) for(int j = 0; j < len; ++j) if(i == s[j]-'a' || i == s[j]-'A') v.emplace_back(s[j]); for(int i = 0, j = 0; i < len && j < v.size(); ++i) if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) s[i] = v[j++]; cout << s << endl; } return 0; }