使用getline和while循环分割字符串
use getline and while loop to split a string
例如,我有一个字符串:
string s = "apple | orange | kiwi";
和我搜索,有一个方法:
stringstream stream(s);
string tok;
getline(stream, tok, '|');
但是它只能返回第一个标记"apple"我想知道有没有什么方法可以让它返回一个字符串数组?谢谢你!让我们假设字符串s可以被改变。例如,字符串s = "apple | orange | kiwi | berry";
正如Benjamin所指出的,你在标题中自己回答了这个问题。
#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>
字符。你可能想把它们去掉。
由于每个单词和|
之间有空格,您可以这样做:
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
Demo: http://www.ideone.com/kC8FZ
注意:只要每个单词和|
之间至少有一个空格,它就会工作。这意味着,如果你有这个,它将不起作用:
string s = "apple|orange|kiwi";
如果您需要健壮的解决方案,
Boost是一个不错的选择。如果你出于某种原因不想使用boost,那么我建议你看看这个博客:
标记字符串的优雅方法
它解释了如何标记字符串,仅举一个例子。
stringstream stream(s);
std::vector<std::string> vec_res;
string tok;
while (getline(stream, tok, '|')) {
vec_res.push_back(tok);
}
相关文章:
- 如何在C++中从字符串中分割字符
- 由cin中的字符串中未捕获空白引起的分割错误
- 按分度分割字符串
- 分割故障:核心倾倒C 矢量对字符串:
- 我应该使用哪个函数来分割字符串
- 如何使用STL分割字符串
- C++如何使用多个分隔符分割字符串流
- 根据分度分割字符串
- 在空格上有选择地分割字符串
- 分割字符串作为邻接矩阵索引
- 用空格分割字符串,但只得到第一个单词
- c++中使用换行符分割字符串
- Std::locale按特定字符分割字符串而不忽略它
- 分割字符串并在不同的分隔符之前获取值
- 如果字符串包含多个 ,如何在每25个换行符( )上分割字符串
- Regex每两个字符分割字符串
- c++中左边的分割字符串
- 在c++中使用字符串(搜索字符串,分割字符串,cout<<字符串)
- 分割字符串
- 使用getline和while循环分割字符串