C++ 游程编码和解码程序

2024年8月28日 | 阅读 4 分钟

游程编码(RLE)是一种直接的数据压缩方法,它用单个元素及其重复次数来代替一系列相同的元素(例如字母或数字)。它有以下步骤:

1. 编码

  • 在编码时,输入数据从左到右扫描。
  • 通过将几个相同的元素浓缩为一个,创建一个后跟计数器的单个元素。
  • 数字通常用于表示计数。

2. 解码

  • 解码过程中,编码数据从左到右扫描。
  • 每当遇到数字计数时,后续字符就会被重复。
  • 它会一直这样做,直到所有编码数据都被解锁

3. C++ 游程编码和解码编程语言

  • 提供的 C++ 程序演示了游程编码解码。它主要有两个目的:
    1. encodingRLE(const string, input)
      • 返回输入字符串的RLE 编码等价物。
      • 通过遍历提供的字符串来计算一系列相同的字符。
      • 将每个字符及其计数添加到编码字符串中。
    2. decodeRLE(const string; encoded)
      • 给定一个RLE 编码字符串后,生成其解码版本。
      • 遍历编码字符串时,根据字符的计数重复字符。
      • 将重复的字符附加到解码字符串中。

4. 用法

  • 用户提供输入字符串。
  • 程序使用EncodeRLE加密输入。
  • 之后,程序通过使用decodeRLE来解码编码字符串。
  • 打印出未加密和编码版本。

5. 应用

  • RLE是一种快速有效的压缩方法,用于图像和视频压缩,特别是二进制图片的无损压缩。
  • 此外,它还用于存在多个连续重复元素的场景,例如压缩文本文件,因为它是加密重复字符或空格的有效方法。

编码

输出

Enter a string: Encourage
Encoded: E1n1c1o1u1r1a1g1e1
Decoded: Encourage

说明

  1. 在此示例中,我们使用encodeRLE进行编码,使用decodeRLE进行解码,它们是程序的主要两个组成部分。
  2. 在 encodeRLE 函数中
    • 编码结果存储在已编码的初始化空字符串中。
    • 它初始化一个计数变量以跟踪一系列相同的字符。
    • 遍历输入字符串时,将每个字符与前一个字符进行比较。
    • 如果字符与前一个字符相同,则增加计数。
    • 如果字符不同,则将前一个字符及其计数添加到编码字符串中,将计数重置为 1,并添加新字符。
    • 循环结束后,它将最后一个字符及其计数添加到编码字符串中。
  3. 在 decodeRLE 函数中
    • 它初始化一个空的解码字符串来存储解码结果。
    • 它遍历编码字符串。
    • 它读取每个字符及其相关的计数(如果有),然后将该字符追加到解码计数中。
  4. 主函数
    • 它接受用户输入字符串。
    • 它使用encodeRLE函数编码输入字符串。
    • 它调用decodeRLE函数解码编码字符串。
    • 它打印出编码解码字符串