我試圖做一個簡單的字符串拆分功能,但即時通訊有一個問題返回拆分字符串。你如何拆分C++數組?
我將字符串轉換爲字符串s1,s2,s3。我如何退回{s1,s2,s3}
?即時通訊使用括號,但編譯器告訴我
expected primary-expression before '{' token
expected `;' before '{' token
expected `;' before '}' token
即使似乎沒有任何問題。正在做{s1,s2,s3}
甚至允許?
我試圖做一個簡單的字符串拆分功能,但即時通訊有一個問題返回拆分字符串。你如何拆分C++數組?
我將字符串轉換爲字符串s1,s2,s3。我如何退回{s1,s2,s3}
?即時通訊使用括號,但編譯器告訴我
expected primary-expression before '{' token
expected `;' before '{' token
expected `;' before '}' token
即使似乎沒有任何問題。正在做{s1,s2,s3}
甚至允許?
這根本不是一個有效的語法。如果你有C++ 0x,你可以返回std::make_tuple(s1, s2, s3)
,或者(更合理),你可以返回一個std::vector<std::string>
。
您應該填寫一個std::vector
並返回。
std::vector<std::string> tokenize(/*...*/)
{
std::vector<std::string> result;
// ...
result.push_back(s); // s: s1 - s3
// ...
return result;
}
注意你不應該居然有變量s1
,s2
或s3
,或者你只是限制了進程三個輸出。您應該在字符串中進行循環,將結果推送到矢量中。
哇,我們的答案几乎完全相同...:S – 2010-11-08 22:56:51
@Matteo:哈哈,哇。 :) – GManNickG 2010-11-08 23:01:36
沒有。你必須把你的字符串放在適當的容器中,這個容器會被你的函數返回;你可以使用,例如,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這不應該是重量級,因爲它看起來。
請在您的文章中加入代碼片段。你如何分割字符串?標準庫中可能有一個函數已經做了你所需要的(提示:'strtok')。 – 2010-11-08 22:51:57
不,retun {s1,s2,s3};'是無效的C++。 – egrunin 2010-11-08 22:52:08
好的。謝謝。我必須說,C++有點煩人 – helpme 2010-11-08 22:57:22