字符串压缩 (C++)

String Compression (C++)

本文关键字:C++ 压缩 字符串      更新时间:2023-10-16

问题是计算字符出现的次数并返回压缩的字符串。例如,"aaabbcc"将返回"a3b2c2"。

我有代码(不是我的),并且正在努力理解它背后的一些逻辑。完整代码为:

#include <iostream>
using namespace std;
int main() {
    char input[] = "aaabbcc";
    char* read = input;
    char* write = input;
    char curr = input[0];
    int count = 0;
    while ( *read != '' ) {
        if ( *read == curr ) {
            count++;
        }
        else {
            *write++ = curr;
            *write++ = count + '0';
            count = 1;
        }
        curr = *read;
        read++;
    }
    *write++ = curr;
    *write++ = count + '0';
    *write = '';
    cout << input << endl;
    return 0;
}

到目前为止,我的理解是读取指针指向 a,写入指针也指向 a(字符串中的第一个字符)。然后,字符curr也设置为 awhile循环开始,表示直到到达字符串的末尾(空字符),将curr字符设置为 read

我感到困惑的是,从这条线开始*write++ = curr;. write当前指向字符串的第一个字符。这是在说取消引用,然后增加位置吗?给定"aaabbcc"的输入,这意味着现在write指向第二个a?但是,这被分配了curr

我想我的另一个问题是它是如何从"aaa"变成"a3"的?

提前感谢您的任何答案。

if 语句检查下一个读取位置是否与上一个

相同
   if ( *read == curr ) {
     count++;
   }

如果不是

    else {
        *write++ = curr;
        *write++ = count + '0';
        count = 1;
    }

写入相同的读取次数

问你这个面试问题的人正在寻找你解释当输入字符串是"abc"而不是"aaabbcc"时会发生什么。