繰り返される文字の数を使用して文字列を圧縮するプログラムを作成しました。圧縮された文字列が元の文字列よりも長い場合でも、元の文字列を返します。以下は私のプログラムです:
void stringCompress(char* src) {
char* original;
original = src;
char* rst;
rst = src;
int histogram[256];
for (int i = 0; i < 256; i++) {
histogram[i] = 0;
}
int length = 0;
while (*src != NULL) {
length++;
src++;
}
src = original;
int j = 0;
for (int i = 0; i < length; i++) {
histogram[(int) src[i]]++;
if (histogram[(int) src[i]] == 1) {
rst[j] = src[i];
j++;
}
}
rst[j] = '\0';
char* final;
rst = original;
int index = 0;
char buffer[33];
for (int i = 0; i < j; i++) {
final[index] = rst[i];
stringstream number;
number<<histogram[(int)rst[i]];
-------> //cout<<number.str()<<endl;
char* temp = new char[number.str().length()+1];
strcpy(temp, number.str().c_str());
index++;
cout<<temp<<endl;
for(int k =0 ;k<number.str().length();k++)
{
final[index]=temp[k];
index++;
}
}
final[index] = '\0';
src = original;
if (index <= length) {
for (int i = 0; i < index; i++)
cout<<final[i];
} else {
cout << src << endl;
}
}
しかし、奇妙なことに、cout文をcout<<number.str()<<endl;
そこに残すと(矢印は文を指します)、出力は正しくなります。たとえば、aaaabcdaaはa6b1c1d1を出力し、aabcdはaabcdを出力します。ただし、コメントアウトするcout<<number.str()<<endl;
と、何も生成されません。どんな助けでも大歓迎です。