我为跑长编码编写了一个小程序。
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"
我怀疑为什么它不打印最后一次计数?
答案 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);
}