|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#利用字符重复出现的次数,编写一个程序,实现基本的字符串压缩功能。
#比如,字符串 FFiiiisshCCCCCC 压缩后变成 F2i4s2h1C6(15字符 -> 10字符,66% 压缩率)。
#所以对于重复次数小于 3 的字符,我们的程序应该选择不对其进行压缩
#压缩字符
text = input('请输入一个字符串')
num=0
text1 = []
text2 = ''
text3 = []
for i in text:
for j in text:
if i==j:
num+=1
text1.append([i,num])
num=0
print(text1)
i=0
while i<len(text1):
if text1[i][1]>3:
print(text1[i][0],end='')
text3.append(text1[i][0])
''.join((text2,text1[i][0]))
print(text1[i][1],end='')
text3.append(text1[i][1])
''.join((text2,str(text1[i][1])))
i=i+text1[i][1]
else:
print(text1[i][0],end='')
text3.append(text1[i][0])
''.join((text2,str(text1[i][1])))
i=i+1
print(text2)
print(text3)
#解压
m = 0
h = 0
for i in text2:
if text2.isdecimal():
while m<int(i):
print(text2[h-1],end='')
h = h + 1
else:
print(i,end='')
h = h + 1
本帖最后由 isdkz 于 2023-4-9 16:07 编辑
您好!在您的代码中,text2 的长度为 0 是因为您在将字符追加到 text2 时使用了错误的方法。
您在这段代码中使用了两种方法,但它们都没有正确地修改 text2。以下是您的代码中存在问题的部分:
1、''.join((text2,text1[i][0]))
2、'.join((text2,str(text1[i][1])))
您应该使用 += 运算符来将字符追加到 text2。以下是修改后的代码:
- text2 += text1[i][0]
- text2 += str(text1[i][1])
复制代码
不过,您的代码中还存在其他问题。以下是修正这些问题后的完整代码:
- # 压缩字符
- text = input('请输入一个字符串: ')
- num = 0
- text1 = []
- for i in text:
- if i not in [item[0] for item in text1]:
- num = text.count(i)
- text1.append([i, num])
- text2 = ''
- i = 0
- while i < len(text1):
- if text1[i][1] > 2:
- text2 += text1[i][0]
- text2 += str(text1[i][1])
- i += 1
- else:
- text2 += text1[i][0] * text1[i][1]
- i += 1
- print(text2)
- # 解压
- m = 0
- h = 0
- while h < len(text2):
- if text2[h].isdigit():
- m = int(text2[h])
- for _ in range(m - 1):
- print(text2[h - 1], end='')
- h += 1
- else:
- print(text2[h], end='')
- h += 1
复制代码
这段代码首先计算每个字符在字符串中出现的次数,然后根据出现次数来决定是否压缩字符。
注意,这种压缩方法在某些情况下可能会导致压缩后的字符串比原始字符串更长,例如当输入为 "aabbcc" 时。最后,使用一个简单的循环来解压缩字符串。
|
|