2010-11-08 43 views
0

我試圖做一個簡單的字符串拆分功能,但即時通訊有一個問題返回拆分字符串。你如何拆分C++數組?

我將字符串轉換爲字符串s1,s2,s3。我如何退回{s1,s2,s3}?即時通訊使用括號,但編譯器告訴我

expected primary-expression before '{' token 
expected `;' before '{' token 
expected `;' before '}' token 

即使似乎沒有任何問題。正在做{s1,s2,s3}甚至允許?

+0

請在您的文章中加入代碼片段。你如何分割字符串?標準庫中可能有一個函數已經做了你所需要的(提示:'strtok')。 – 2010-11-08 22:51:57

+1

不,retun {s1,s2,s3};'是無效的C++。 – egrunin 2010-11-08 22:52:08

+0

好的。謝謝。我必須說,C++有點煩人 – helpme 2010-11-08 22:57:22

回答

0

您可能想要返回類型vector<string>。然後在你的函數中創建一個向量並將其作爲一個值返回。

+0

非常感謝!我認爲我的程序現在應該工作 – helpme 2010-11-08 22:58:01

+0

只要「接受」,無論你發現哪個答案最清晰,我們都會很開心:) – egrunin 2010-11-08 23:01:04

0

這根本不是一個有效的語法。如果你有C++ 0x,你可以返回std::make_tuple(s1, s2, s3),或者(更合理),你可以返回一個std::vector<std::string>

3

您應該填寫一個std::vector並返回。

std::vector<std::string> tokenize(/*...*/) 
{ 
    std::vector<std::string> result; 

    // ... 
    result.push_back(s); // s: s1 - s3 
    // ... 

    return result; 
} 

注意你不應該居然有變量s1s2s3,或者你只是限制了進程三個輸出。您應該在字符串中進行循環,將結果推送到矢量中。

+0

哇,我們的答案几乎完全相同...:S – 2010-11-08 22:56:51

+0

@Matteo:哈哈,哇。 :) – GManNickG 2010-11-08 23:01:36

1

沒有。你必須把你的字符串放在適當的容器中,這個容器會被你的函數返回;你可以使用,例如,std::vector<std::string>

std::vector<std::string> YourFunction(/* ... */) 
{ 
    std::vector<std::string> ret; 
    // ... 
    ret.push_back(s); // you should call this for each string 
    // ... 
    return ret; 
} 

由於RVO這不應該是重量級,因爲它看起來。