需要用于文本压缩/解压缩的伪代码

问题描述:

规格:您将编写一个简单的文本压缩和解压缩算法,称为压缩,它使用重复字符的计数来压缩和恢复,将文本压缩为原始文本。数据将从文件而不是键盘读入。需要用于文本压缩/解压缩的伪代码

输入:aaaaaaaaaaaaaaaaaaaAabc 输出:a19A1a1b1c1

在你的程序中,必须有以下两种方法。然后在main方法中调用这两个方法来压缩和解压缩输入文本。

公共静态字符串CompressStr(字符串输入,布尔debug_sw)

公共静态字符串DecompressStr(字符串输入,布尔debug_sw)

+6

http://mattgemmell.com/2008/12/08/what-have-you-尝试/ – Jack

+1

如何:读取文件;用“count + char”替换“字符序列”;写入文件。 – rodrigo

Java有这个类的标准API中:ZIP/GZipInputStream和Zip/GZipOutputStream。如果您需要压缩数据,请使用这些数据而不是滚动自己的数据。如果你将此作为学习练习,最好试着阅读Zip的算法。

+0

不是我的downvote,但是这并没有回答这个问题:“你要写一个简单的文本压缩和解压缩算法... *,它使用重复字符的计数*”即RLE而不是LZW等 – DNA

那是游程编码算法:http://en.wikipedia.org/wiki/Run-length_encoding

Loop: count = 0 
     REPEAT 
      get next symbol 
      count = count + 1 
     UNTIL (symbol unequal to next one) 
       output symbol 
     IF count > 1 
      output count 
     GOTO Loop 

一些Python代码:

# http://acm.zhihua-lai.com 

def runlen(s): 
    r = "" 
    l = len(s) 
    if l == 0: 
     return "" 
    if l == 1: 
     return s + "1" 
    last = s[0] 
    cnt = 1 
    i = 1 
    while i < l: 
     if s[i] == s[i - 1]: # check it is the same letter 
      cnt += 1 
     else: 
      r = r + s[i - 1] + str(cnt) # if not, store the previous data 
      cnt = 1 
     i += 1 
    r = r + s[i - 1] + str(cnt) 
    return r 

if __name__ == "__main__": 
    print runlen("aaabbccccddddd") 
    print runlen("a") 
    print runlen("") 
    print runlen("abcdefg") 
    print runlen("eeeeeaaaff")