无法在C ++中打印字符串

时间:2017-02-12 15:37:17

标签: c++ string

#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函数中打印压缩输出。

2 个答案:

答案 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++) {
                ....
            }
            ....
    }