将数据压缩为连续递增子序列首字母+连续子序列长度的形式

有一个长度为N的字符数组,它由若干连续递增子序列构成,比如

img

如何将其压缩为

img


即连续递增子序列首字母+连续子序列长度的形式(压缩后的数据储存在一个新的字符数组里)

您可以通过以下步骤实现这个需求:
初始化两个指针,分别指向数组的第一个字符和第二个字符,并初始化一个变量count来记录子序列长度。
循环比较这两个字符,如果相同,count++,并移动第二个指针;如果不同,就把首字母和count的值写入新的字符数组中,然后重置count值为1,把第一个指针移动到第二个指针处,继续进行比较。
循环结束后,把首字母和最后一个子序列的长度写入新的字符数组中。

for (int i = 1; i < n; i++) {
    if (str[i] == str[i-1]+1) {
        count++;
    } else {
        result += str[i-1];
        result += to_string(count);
        count = 1;
    }
}

result += str[n-1];
result += to_string(count);


循环判断递增多少次,不递增了就重来这个过程


std::string compress_str(const std::string& input)
{
    int count = 0;
    char last_c;
    std::string result = "";

    for (char c: input) {    
        if (0 == count) {
            last_c = c;
            result += c;
            count++;
            continue;
        }
        if (c - last_c == 1) {
            count++;
        } else {
            result += std::to_string(count);
            count = 1;
            result += c;
        }
        last_c = c;
    }
    if (count > 0) result += std::to_string(count);

    return result;
}

img