题目地址
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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).
解题思路
1、将字符串中所有的字母按照 原字符串
顺序取出,组成新的 拼接字符串
2、遍历 原字符串
,将其中的每一个字母按照顺序替换为 拼接字符串
中的字符
3、替换之后,需要将 拼接字符串
中对应的字符移除掉
需要注意的是,同一个英文字母的大小写同时存在时,要按照输入顺序排列,所以,这里要特殊处理一下大小写字母的问题。
代码
- Python 3
def func():
s = input()
dic = 'abcdefghijklmnopqrstuvwxyz'
ns = ''
for c in s:
if 'a' <= c <= 'z' or 'A' <= c <= 'Z':
ns = ns + c
r = ''
for c in s:
if not ('a' <= c <= 'z' or 'A' <= c <= 'Z'):
r = r + c
continue
for d in dic:
ld = ns.find(d)
ud = ns.find(d.upper())
# 没有找到这个字符
if ld == -1 and ud == -1:
continue
# 只找到小写字母,或者小写字母排序在前
if ld < ud and ld != -1 or (ud == -1 and ld != -1):
r = r + d
ns = ns.replace(d, '', 1)
break
# 只找到大写字母,或者大写字母排序在前
if ld > ud and ud != -1 or (ud != -1 and ld == -1):
r = r + d.upper()
ns = ns.replace(d.upper(), '', 1)
break
print(r)
while True:
try:
func()
except:
break