为什么此功能打印x而不是1?

时间:2013-12-03 10:06:11

标签: c++

我为跑长编码编写了一个小程序。

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"

我怀疑为什么它不打印最后一次计数?

2 个答案:

答案 0 :(得分:0)

而不是使用

str.resize(k) 

我需要使用

str.resize(k+1);

答案 1 :(得分: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);
}