字符串--------》排序、转换

    技术2025-12-12  24

    字符串排序

    题目描述

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

    余数说明:https://www.cnblogs.com/hylogs/p/12822870.html

    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

     

    Processed: 0.017, SQL: 9