2016-10-08 20 views
1

スペースを含む文字列を空白なしのchar配列に変換しようとしています。ここで文字列をchar配列に変換できません

は、私は、出力が保存されつつある。この

Enter a string: hello world 
h 
e 
l 
l 
o 

w 
o 
r 
l 
d 

hello 

のみhelloのように見えます

string str; 
    cout << "Enter a string: "; 
    getline(cin, str); 
    int TempNumOne=str.size(); 
     char Filename[100]; 
     for (int a=0;a<=TempNumOne;a++) 
       { 
        cout<<str[a]<<endl; 
        if(str[a]!=' ') 
         Filename[a]=str[a]; 
       } 

     cout<<Filename; 

を試みたものです。なぜこれが起こっているのですか?これをどのように解決しますか? str[4]oで、str[6]wでの "Hello World" で

if(str[a]!=' ') 
      Filename[a]=str[a]; 

、:ので

+1

なぜ厄介なインデントですか? –

+0

@πάνταῥεῖ:ストリップスペースはどうやって作られますか? –

+0

@LightnessRacesinOrbit私はその要件を見落としました。 –

答えて

4

です。上記のコードでは、Filename[5]の代わりにoFilename[4]に、wFilename[6]に保存します。コンピュータはあなたの言うことだけを行い、今はあなたがしたいことをします。あなたのロジックはスペースを飛ばしましたが、それはそれを対応する位置にコピーしてバッファーのFilenameにコピーしなかっただけです。これは、与えられたタスクを達成するには十分ではありません。 、

if(str[a]!=' ') 
     Filename[b++]=str[a]; 

をしてFilename nullで終了することを忘れないでください:

はその後、あなたは0に初期化し、例えば、bそれを呼び出す、別のインデックス変数を維持する必要がこれを正しく行うために、最後に。

+0

それは正しいですが、それは元の質問に答えることはできません:) – SomeWittyUsername

1

Filename配列が初期化されていません。つまり、ゼロを含む任意の値が含まれる可能性があります(これはおそらく起こります)。

ここで、アルゴリズムを考えてみましょう。最初のスペースまでデータをコピーし、の位置をスキップしての位置に移動し、2番目の単語に進みます。スキップすることにより、元の状態、つまり未初期化状態のスペース位置に対応する場所をFilenameのままにします。元の値が0の場合は、文字列ターミネータ(\0)に対応します。文字列を印刷すると、\0が発生すると解析が停止し、残りのデータは表示されません。

関連する問題