Проблема заключается в том, сколько раз появляется символ и возвращает сжатую строку. Например, «aaabbcc» вернет «a3b2c2».String Compression (C++)
У меня есть код (не мой), и я пытаюсь понять некоторые из его логических соображений. Полный код:
#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 != '\0') {
if (*read == curr) {
count++;
}
else {
*write++ = curr;
*write++ = count + '0';
count = 1;
}
curr = *read;
read++;
}
*write++ = curr;
*write++ = count + '0';
*write = '\0';
cout << input << endl;
return 0;
}
Мое понимание до сих пор является то, что указатель указывает на чтение к , и указывает указатель записи на , а также (первый символ в строке). Затем символ curr
устанавливается на a. Начинаются петли while
, говоря, что до тех пор, пока не будет достигнут конец строки (нулевой символ), установите символ curr
на read
.
О чем я смущен, является начало с этой строки *write++ = curr;
. write
в настоящее время указывает на первый символ строки. Разве это высказывание разыменовывает, а затем увеличивает позицию? Учитывая ввод «aaabbcc», это будет означать, что сейчас write
указывает на второй a? Но тогда этому присваивается значение curr
?
Я предполагаю, что мой другой вопрос, как это идет от «ааа» просто «a3»?
Заранее благодарим за любые ответы.
Подсказка: когда 'count == 3',' count + '0' == '3''. –