2017-02-12 9 views
-1
#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で表示されますが、何とかmain関数とcompress_string関数で圧縮出力を表示していないことがわかります。C++で文字列を印刷することができません

+1

「動作していません」より具体的にしてください。 – GhostCat

+0

実際のエラーは何ですか? – Shravan40

+1

'output_string'は空です。 'output_string [j]'はすべての 'j> 0'に対して、バッファオーバーランを介して未定義の動作を示します。 –

答えて

2
string output_string; 

output_stringはここでは空です。 以下のような要素へのアクセスは、未定義の動作です。

output_string[j] = input_string[i]; 

resizeそれあなたがその個々の要素にアクセスすることができますinput_string【選択の長さ。このためinput_string[i+1] == input_string[i]i+1チェックの1 -

output_string.resize(input_string.length()); 
0

あなたは文字列の長さに文字列の長さから最初forのループの範囲を縮小する必要があります。

output_stringは空ですが、インデックスを使用してアクセスすることはできません。これは未定義の動作です。

for (int i = 0; i < input_string.length() - 1; i++,j++) { 
    ..... 
      for (int k = i; k < input_string.length();k++) { 
       .... 
      } 
      .... 
    } 
関連する問題