2016-07-17 3 views
-2

Проблема заключается в том, сколько раз появляется символ и возвращает сжатую строку. Например, «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»?

Заранее благодарим за любые ответы.

+0

Подсказка: когда 'count == 3',' count + '0' == '3''. –

ответ

3

Условный оператор проверяет, если следующая позиция считывания такой же, как и предыдущий

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

И если это не

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

написать число чтений, что было то же самое

Человек, который задает вам этот вопрос интервью, ищет, чтобы вы объяснили, что происходит, когда строка ввода «abc» вместо «aaabbcc».