python 字符串排序 偶数位交换_字符串--------》排序、转换

字符串排序

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 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

while True:

try:

s = input()

res,chars = [False]*len(s),[]

for i,v in enumerate(s):

if v.isalpha():

chars.append(v)

else:

res[i] = v

chars.sort(key=lambda c:c.lower())

for i,v in enumerate(res):

if not v:

res[i] = chars[0]

chars.pop(0)

print("".join(res))

except:

break

解法2

while True:

try:

s = input()

res,chars = [False]*len(s),""

for i,v in enumerate(s):

if v.isalpha():

chars+=v

else:

res[i] = v

chars = sorted(chars, key=lambda c:c.lower())

for i,v in enumerate(res):

if not v:

res[i] = chars[0]

chars.pop(0)

print("".join(res))

except:

break

【中级】单词倒排

题目描述

对字符串中的所有单词进行倒排。

说明:

1、构成单词的字符只有26个大写或小写英文字母;

2、非构成单词的字符均视为单词间隔符;

3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

4、每个单词最长20个字母;

输入描述:

输入一行以空格来分隔的句子

输出描述:

输出句子的逆序

示例1

输入

I am a student

输出

student a am I

拿到题自己以为很简单(实际也不难^_^),自己的解法如下:

while True:

try:

str_list = []

temp = ''

for c in input():

if c.isalpha():

temp += c

else:

if temp != '':

str_list.append(temp)

temp = ''

print(' '.join(str_list[::-1]))

except:

break

在测试程序中没有通过,原因是此种解法原有的字符串中如果最后字符是英文字母的话,程序没有算在内!!,所以是失败的!!

推荐的正确解法如下:

import re

try:

while True:

string = ""

for c in input():

if c.isalpha():

string += c

else:

string += " "

str_spac = re.findall("[ ]+", string)

for c in str_spac:

string.replace(c, ' ')

print(' '.join(string.split()[::-1]))

except:

pass

字符串合并处理

题目描述

按照指定规则对输入的字符串进行处理。

详细描述:

将输入的两个字符串合并。

对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。

对排序后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。

举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”

接口设计及说明:

/*

功能:字符串处理

输入:两个字符串,需要异常处理

输出:合并处理后的字符串,具体要求参考文档

返回:无

*/

void ProcessString(char* str1,char *str2,char * strOutput)

{

}

输入描述:

输入两个字符串

输出描述:

输出转化后的结果

示例1

输入

dec fab

输出

5D37BF

try:

while True:

string = input().replace(" ", "")

dic = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']

r_str = ""

l_str = ""

final_str = ""

for i in range(len(string)):

if i % 2 == 0:

r_str += string[i]

else:

l_str += string[i]

r_str = "".join(sorted(r_str))

l_str = "".join(sorted(l_str))

for i in range(len(r_str)):

c = r_str[i]

if c in "0123456789abcdefABCDEF":

final_str += dic[int(bin(dic.index(c.upper())).replace("0b", "").rjust(4, "0")[::-1], 2)]

else:

final_str += c

if len(l_str) != i:

c = l_str[i]

if c in "0123456789abcdefABCDEF":

final_str += dic[int(bin(dic.index(c.upper())).replace("0b", "").rjust(4, "0")[::-1], 2)]

else:

final_str += c

print(final_str)

except:

pass

字符串加解密

题目描述

1、对输入的字符串进行加解密,并输出。

2加密方法为:

当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;

当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;

其他字符不做变化。

3、解密方法为加密的逆过程。

接口描述:

实现接口,每个接口实现1个基本操作:

void Encrypt (char aucPassword[], char aucResult[]):在该函数中实现字符串加密并输出

说明:

1、字符串以\0结尾。

2、字符串最长100个字符。

int unEncrypt (char result[], char password[]):在该函数中实现字符串解密并输出

说明:

1、字符串以\0结尾。

2、字符串最长100个字符。

输入描述:

输入说明

输入一串要加密的密码

输入一串加过密的密码

输出描述:

输出说明

输出加密后的字符

输出解密后的字符

示例1

输入

abcdefg

BCDEFGH

输出

BCDEFGH

abcdefg

python解法:

def encodeAndDecode(string, mode):

res = ""

for i in string:

code = ord(i)

if 48 <= code <= 57: # 数字

res += chr(48 + (code - 48 + mode) % 10)

elif 97 <= code <= 122: # 小写字母

res += chr(65 + (code - 97 + mode) % 26)

elif 65 <= code <= 90: # 大写字母

res += chr(97 + (code - 65 + mode) % 26)

else:

res += i

return res

try:

while True:

print(encodeAndDecode(input(), 1))

print(encodeAndDecode(input(), -1))

except:

pass

字符串加密

题目描述

有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词属于字母表的下面,如下所示:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

T R A I L B Z E S C D F G H J K M N O P Q U V W X Y

上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。

请实现下述接口,通过指定的密匙和明文得到密文。

详细描述:

接口说明

原型:

voidencrypt(char * key,char * data,char * encrypt);

输入参数:

char * key:密匙

char * data:明文

输出参数:

char * encrypt:密文

返回值:

void

输入描述:

先输入key和要加密的字符串

输出描述:

返回加密后的字符串

示例1

输入

nihao

ni

输出

le

解法1:

while True:

try:

dd = {'A':'', 'B':'', 'C':'', 'D':'', 'E':'', 'F':'', 'G':'', 'H':'', 'I':'', 'J':'', 'K':'', 'L':'', 'M':'',

'N':'', 'O':'', 'P':'', 'Q':'', 'R':'', 'S':'', 'T':'', 'U':'', 'V':'', 'W':'', 'X':'', 'Y':'', 'Z':''}

real_str, encrypt = '', ''

key, data = input(), input()

string = key.upper() + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for c in string:

if c not in real_str:

real_str += c

for i in range(26):

dd[chr(65 + i)] = real_str[i]

for c in data:

if c.isupper():

encrypt += dd[c]

elif c.islower():

encrypt += dd[c.upper()].lower()

else:

encrypt += c

print(encrypt)

except:

break

解法2:

while True:

try:

#key,string分别代表输入的key的加要密的字符串

#chars是密钥对应的字母表,res是要返回的结果。

key, string, chars, res = input(), input(), [], ""

#经过下面的循环,chars前面几个是密匙的字母

for i in key:

if i not in chars:

chars.append(i)

#如果输入的key中有小写字母,转为大写字母。

chars = list(map(lambda c: c.upper(), chars))

#剩下的字母,填充到chars里面。

for i in range(65, 91):

if chr(i) not in chars:

chars.append(chr(i))

# 将输入加密。

for i in string:

if i.isupper():

res += chars[ord(i) - 65]

elif i.islower():

res += chars[ord(i) - 97].lower()

else:

res += i

print(res)

except:

break

字符串通配符

题目描述

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。

要求:

实现如下2个通配符:

*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)

?:匹配1个字符

输入:

通配符表达式;

一组字符串。

输出:

返回匹配的结果,正确输出true,错误输出false

输入描述:

先输入一个带有通配符的字符串,再输入一个需要匹配的字符串

输出描述:

返回匹配的结果,正确输出true,错误输出false

示例1

输入

te?t*.*

txt12.xls

输出

false

解法

import re

while True:

try:

a,b = input().strip(),input().strip()

a = a.replace("?","\w{1}").replace(".","\.").replace("*","\w*")

c = re.findall(a,b)

if b in c and len(c) == 1:

print("true")

else:

print("false")

except:

break

原文链接:https://blog.csdn.net/hyblogs/article/details/107128742

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值