2012-01-05 60 views
0

我在我的拆分句子功能有問題。
我的函數的思想分裂的任何一句話,並把它添加到陣列像我的功能錯誤(拆分句)

例子:

一句話::世界,你好。
我的函數將工作::(陣列[0] =你好,陣列[1] =世界)。

這是我的代碼

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]://空(必須是「世界」)

我的功能有什麼問題。
爲什麼array [1]是空的。

+0

你怎麼叫它? – littleadv 2012-01-05 12:50:14

+1

您是否試過在調試器中逐步完成該功能?那麼你會很清楚地看到錯誤是什麼。 – 2012-01-05 12:56:04

回答

1
const int Size = strlen(Sentence); 

此計算字符串數據的長度,但不最終空終止,所以你的循環將找不到終止,並且不包括最後一個字。你想添加一個這個值來獲得終止字符串的全部長度。

+0

是的,你說得對,我忘了這個 – 2012-01-05 13:00:51

1

您的for循環運行不足以達到Sentence[i] == '\0'的情況。它只會運行到「hello world」的「d」,因此流的內容不會再寫入輸出數組中。

例如,你可以寫:

const int Size = strlen(Sentence)+1; 

,並已包括最後的空字節。

+0

是的,你也是對的,但你不是第一個 – 2012-01-05 13:06:12

+1

呃,三分鐘之前是不是「第一」?這是你選擇哪個答案你選擇,但你應該檢查你的「第一」的定義。 – 2012-01-05 13:15:00

+0

感謝您的回答,我不明白您的答案,但編輯後您的答案成爲您的答案一個可以理解的答案,但在您編輯您的答案之前,我已閱讀其他人的答案... (我被給出給你upvote) – 2012-01-05 14:27:33

1

你只需要改變你的for循環:

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

是的,你也是對的,但你不是第一個 – 2012-01-05 13:03:02