2012-01-05 14 views
0

分割文章機能に問題があります。私の機能の
アイデアは、任意の文章を分割し、私の機能のエラー(分割文)

例のような配列に追加します。

文::こんにちは、世界。
私の関数は動作します::(array [0] = hello、array [1] = world)。

これは

ストリーム結果、私のコード

void splitSentence(char *Sentence, char symb){ 
    const int Size = strlen(Sentence); 
    string SentenceResult[2]; 
    int count= 0; 
    stringstream stream; 
    for(int i=0;i<Size;i++){ 
     stream << Sentence[i]; 
     if((Sentence[i] == symb) || (Sentence[i] == '\0')){ 
      SentenceResult[count] = stream.str(); 
      count++; 
      stream.str(" "); 
     } 
    } 
    cout << "Stream: " << stream.str() << endl; 
    cout << "Word [0]: " << SentenceResult[0] << endl; 
    cout << "Word [1]: " << SentenceResult[1] << endl; 
} 

です:世界
配列[0]:こんにちは
配列[1]://空(「世界」でなければならない)

私の機能にはどのような問題がありますか?
なぜ配列[1]が空であるか。

+0

どのようにそれを呼び出していますか? – littleadv

+1

デバッガで関数をステップ実行しようとしましたか?次に、エラーが何であるかがはっきりとわかります。 –

答えて

1
const int Size = strlen(Sentence); 

ではなく最終ヌルターミネータは、ので、あなたのループはターミネータを見つけることができません、と最後の単語が含まれていません。この値に1を加えて、終了した文字列の全長を取得します。

+0

はい、あなたは正しいです、私はこれを忘れました –

1

お客様のforループは、Sentence[i] == '\0'ケースに到達するのに十分な距離ではありません。それは "hello world"の "d"までしか動かないので、ストリームのconentは出力配列にもう書き込まれません。例えば、書き込み用

あなたは可能性:

const int Size = strlen(Sentence)+1; 

、あなたが最終ヌルバイトが含まれています。これは、文字列データの長さを計算

+0

はい、あなたも正しいですが、あなたは最初ではありません –

+1

3分前は「最初」ではありませんか?あなたが選ぶ答えはあなたの選択ですが、「最初の」という定義をチェックしてください。 –

+0

あなたの答えをお寄せいただきありがとうございます。私はあなたの答えを最初に理解できませんでしたが、あなたの答えはあなたの答えになるはずですが、あなたの答えを編集する前に私は他の人に答えを読んでいます... あなたにupvote) –

1
あなたは自分の forループを変更する必要があり

for(int i=0; i <= Size; i++) 
+0

はい、あなたもそうですが、あなたは最初ではありません –

関連する問題