class Zipper {
public:
string zipString(string iniString) {
int length = iniString.size();
if(length<2)
return iniString;
int length_new = 0;
char tmp = iniString[0];
int tmp_num = 1;
vector<char> data;
for(int i=1; i<length; i++)
{
if(iniString[i]==iniString[i-1])
tmp_num++;
if((iniString[i]!=iniString[i-1])||(i==length-1))
{
data.push_back(tmp);
length_new += 1;
char tmp_save[10000];
int save_length = sprintf(tmp_save,"%d",tmp_num);
for(int j=0; j<save_length; j++)
data.push_back(tmp_save[j]);
length_new += save_length;
tmp = iniString[i];
tmp_num = 1;
if(length_new >= length)
return iniString;
}
}
string str(data.begin(),data.end());
return str;
}
};
在写的过程中,犯了一个错误:
if(iniString[i] == iniString[i-1])
……
else
……
这样是不对的,else中需要考虑iniString[i] != iniString[i-1]和i==length-1的情况,因为最后一个元素也是需要被记录的