【问题描述】
下面的描述字符串的方法称为速记符:
1."a-d" : 代表ASCII码在a和b之间的所有字符构成的连续字符串。其中必有a<b。
2."a-b-c" : 代表ASCII码在a和b, 再到c之间的所有字符构成的连续字符串。其中必有a<b<c。
例如:"a-c"代表字符串"abc","a-z"代表字符串"abcdefghhijklmnopqrstuvwxyz","a-c-g"代表字符串"abcdefg",等等。
在字符串开始和结尾处的'-'不做处理。 编写函数expand(s1,s2),将字符串s1中的速记符号在字符串s2中加以扩展形成等价的完整串.允许处理大小写字母和数字,并可以处理诸如a-b-c与a-z0-9与-a-z等情况.
编写程序,使用函数expand,将输入的字符串s1,进行处理,将结果输出.正确安排好前导和尾随的-.
【输入形式】
控制台输入s1.可以含有空格,制表符,换行符.以Ctrl+d 作为输入的结束.
【输出形式】
控制台输出变换后的s1.
【样例输入】
toooold-f0-8 A-F
【样例输出】
tooooldef012345678 ABCDEF
【样例说明】
输出对输入中的d-f,0-8,A-F进行了扩展.
【题解】
def str_insert(str_origin, pos, str_add):
str_list = list(str_origin)
str_list.insert(pos, str_add)
str_out = ''.join(str_list)
return str_out
def str_delete(str, i):
list_str = list(str)
list_str.pop(i)
list_str = ''.join(list_str)
return list_str
def expand(s1):
global s2
s2 = ''
end = s1[-1]
i = 0
while 1:
if s1[i] == '-':
for j in range(ord(s1[i - 1]) + 1, ord(s1[i + 1])):
s2 = s2 + chr(j)
if s1[i-1] > s1[i+1]:
break
else:
after_delete = str_delete(s1,i)
s1 = str_insert(after_delete, i, s2)
s2 = ''
i = i + 1
else:
i = i + 1
if s1[i] == end:
break
return s1
s = input()
print(expand(s))