2012-01-05 62 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