字符串排序
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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