2013-12-03 5 views
-1

Я написал небольшую программу для кодирования длины пробега.Почему эта функция печатает x вместо 1?

void runLengthEncoding (string& str) 
{ 
    int k=0; 
    int count =1; 
    for (unsigned i=1, count=1; i<str.size(); ++i) 
    { 
      if (str[i] == str[k]) 
      { 
        count +=1; 
      } 
      else 
      { 
        str[++k] = count+'0'; 
        str[++k] = str[i]; 
        count = 1; 
      } 
    } 
    str[++k] = count + '0'; 

    str.resize(k); 
} 

Когда я вызываю эту функцию с помощью

string s = "wwwwaaadexxxxxx"; 
runLengthEncoding (s); 
cout << endl << s; 

Это печать - "w4a3d1e1x" Он должен печатать - "w4a3d1e1x6"

Мои сомнения, почему он не печатает последний отсчет?

+1

Я не понять свои сомнения. – vipw

+2

Запуск под отладчиком, запуск в точке останова до последнего цикла, одношаговый, просмотр того, что происходит. –

+3

'Он должен печатать "w4a3d1e11"' - нет, не должен ли он печатать "w4a3d1e1x6"? – Constantin

ответ

0

Вместо использования

str.resize(k) 

мне нужно использовать

str.resize(k+1); 
+0

Если вы отвечаете на свой вопрос, тогда MARK IT в качестве ответа (для будущих читателей). В противном случае это просто комментарий, и вы, как владелец вопроса, должны просто отредактировать текст вопроса, чтобы добавить дополнительную информацию. –

0

При удалении для инициализации счетчика, и размер правильно, вы его получили:

void runLengthEncoding (string& str) 
{ 
    int k=0; 
    int count =1; 
    for (unsigned i=1; i<str.size(); ++i) 
    { 
     if (str[i] == str[k]) 
     { 
      count +=1; 
     } 
     else 
     { 
      str[++k] = count+'0'; 
      str[++k] = str[i]; 
      count = 1; 
     } 
    } 

    str[++k] = count + '0'; 
    str.resize(++k); 
} 
+0

Это не работает. См. Мой (второй) комментарий к OP. – TonyK

+0

Он работает: мой вывод 'w4a3d1e1x6': правильный один –

+0

Теперь попробуйте на« bad_idea », как я сказал в своем комментарии. – TonyK

Смежные вопросы