#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
using namespace std;
string compress_string(string input_string)
{
string output_string;
int j=0;
for (int i=0; i < input_string.length();i++,j++)
{
output_string[j] = input_string[i];
cout<<"output string at "<<j<<"is"<<output_string[j];
int count =1;
for (int k = i; k < input_string.length();k++)
{
if (input_string[i+1] == input_string[i])
{
count++;
i++;
}
else
{
break;
}
}
j++;
cout<<"count is"<<count<<"\n";
output_string[j]=count+'0';
cout<<"String till now is "<<output_string<<"\n";
}
output_string[j]='\0';
cout<<"Output string:"<<output_string<<"\n";
printf("output string is %s\n",output_string.c_str());
return output_string;
}
int main() {
// your code goes here
string input_string;
cout << "Enter the string";
cin >> input_string;
cout<<"Compressed output is"<<compress_string(input_string);
return 0;
}
我尝试了上面的程序,我发现程序末尾的压缩输出没有被打印出来 我看是否使用c_str(),它在printf中打印,但cout不知何故不在main函数和compress_string函数中打印压缩输出。
答案 0 :(得分:2)
string output_string;
output_string
在这里是空的。
访问如下所示的元素是未定义的行为。
output_string[j] = input_string[i];
resize
它的长度为input_string
。您可以访问其各个元素;
output_string.resize(input_string.length());
答案 1 :(得分:0)
您必须将首个for
循环的范围从字符串长度减少到字符串长度 - 1.由于input_string[i+1] == input_string[i]
i+1
检查。
并且output_string
为空,您无法使用索引访问它,这是一种未定义的行为。
for (int i = 0; i < input_string.length() - 1; i++,j++) {
.....
for (int k = i; k < input_string.length();k++) {
....
}
....
}