字符串压缩 (C++)
String Compression (C++)
问题是计算字符出现的次数并返回压缩的字符串。例如,"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
也设置为 a。while
循环开始,表示直到到达字符串的末尾(空字符),将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"时会发生什么。
相关文章:
- C++中高效的大型稀疏块压缩线性方程
- 嵌入方指针压缩已禁用
- C++使用整数的压缩数组初始化对象
- 在C++中将函数压缩为两种方式
- 在C++中使用LZ4压缩目录
- 使用C++进行运行长度解压缩
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- C++ 如何将数组值解压缩为函数参数
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- 浏览压缩文件与游览解压缩它们
- 直接 2D 呈现到命令列表和打印:图片压缩
- 如何在 OpenCV c++ 中压缩 TIFF 格式的图像?
- 如何在C++向量中解压缩多个值
- 解压缩 C 样式数组以及C++中的参数包
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- 连接和压缩标准::vector<std::字符串的最佳方法>
- 如何使用 Poco::ZIP 压缩/解压缩 zip 文件