例如我有一个字符串:
string s = "apple | orange | kiwi";
我搜索了,有一种方法:
stringstream stream(s);
string tok;
getline(stream, tok, '|');
但它只能返回第一个标记“apple” 我想知道有什么办法可以返回一个字符串数组吗? 谢谢。 假设可以改变字符串s。例如,字符串s =“apple | orange | kiwi | berry”;
答案 0 :(得分:30)
正如本杰明指出的那样,你在标题中自己回答了这个问题。
#include <sstream>
#include <vector>
#include <string>
int main() {
// inputs
std::string str("abc:def");
char split_char = ':';
// work
std::istringstream split(str);
std::vector<std::string> tokens;
for (std::string each; std::getline(split, each, split_char); tokens.push_back(each));
// now use `tokens`
}
请注意,您的令牌仍会包含尾随/前导<space>
个字符。你可能想把它们剥离。
答案 1 :(得分:4)
由于每个单词与|
之间有空格,您可以这样做:
string s = "apple | orange | kiwi";
stringstream ss(s);
string toks[3];
string sep;
ss >> toks[0] >> sep >> toks[1] >> sep >> toks[2];
cout << toks[0] <<", "<< toks[1] <<", " << toks[2];
输出:
apple, orange, kiwi
演示:http://www.ideone.com/kC8FZ
注意:只要每个单词和|
之间至少有一个空格,它就会起作用。这意味着,如果您这样做,它将无法运作:
string s = "apple|orange|kiwi";
Elegant ways to tokenize strings
它解释了如何使用一个示例来标记字符串。