题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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).
题解思路
理解题意,仅对于 ‘A’ ~ ‘Z’ 和 ‘a’ ~ ‘z’ 的字母作排列,且不区分大小写,大小写同时存在就按输入的顺序排列。那么就上述规则,对于目标字符串中的字母按顺序排好序,依次替换字符串中的字母即可。
代码实现
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
char str[1000] = {0};
char temp[1000] = {0};
int k = 0;
while(cin.getline(str, 1000)) {
int len = strlen(str);
k = 0;
for(int i = 0; i < 26; ++i) {
for(int j = 0; j < len; ++j) {
if(str[j] == 'a' + i || str[j] == 'A' + i) {
temp[k++] = str[j];
}
}
}
k = 0;
for(int i = 0; i < len; ++i) {
if(str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z') {
str[i] = temp[k++];
}
}
cout << str << endl;
}
return 0;
}

博客围绕编写C++程序对输入字符串按特定规则排序展开。规则包括英文字母按A到Z不区分大小写排列,同一字母大小写按输入顺序排列,非英文字母位置不变。题解思路是对字符串中字母排序后依次替换,还提及有多组测试数据。
1192

被折叠的 条评论
为什么被折叠?



