如何使用C++拆分带分隔符的字符串
How to split string with delimiter using C++?
嗨,我有以下字符串
{
"data1" : "sample data",
"data2" : "sample data2"
}
我想使用字符串库将以上字符串拆分为
data1
sample data
下面是我想出的代码,但它只向左分,不向右分。上述数据存储在缓冲区中,并通过line_number进行迭代。
if(pos != std::string::npos)
{
newpos = buffer[line_number].find_first_of(":",pos);
token = buffer[line_number].substr(pos + 1,newpos-pos-1);
pos = newpos + 1;
std::cout << token << std::endl;
}
非常感谢您的帮助。
非常简单的解析器可能如下所示:
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
static string& strip(string& s, const string& chars = " ")
{
s.erase(0, s.find_first_not_of(chars.c_str()));
s.erase(s.find_last_not_of(chars.c_str()) + 1);
return s;
}
static void split(const string& s, vector<string>& tokens, const string& delimiters = " ")
{
string::size_type lastPos = s.find_first_not_of(delimiters, 0);
string::size_type pos = s.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos) {
tokens.push_back(s.substr(lastPos, pos - lastPos));
lastPos = s.find_first_not_of(delimiters, pos);
pos = s.find_first_of(delimiters, lastPos);
}
}
static void parse(string& s, map<string,string>& items)
{
vector<string> elements;
s.erase(0, s.find_first_not_of(" {"));
s.erase(s.find_last_not_of("} ") + 1);
split(s, elements, ",");
for (vector<string>::iterator iter=elements.begin(); iter != elements.end(); iter++) {
vector<string> kv;
split(*iter, kv, ":");
if (kv.size() != 2) continue;
items[strip(kv[0], " "")] = strip(kv[1], " "");
}
}
int
main()
{
string data = " { "key1" : "data1" , "key2" : "data2" } ";
map<string,string> items;
parse(data, items);
for (map<string,string>::iterator iter=items.begin(); iter != items.end(); iter++) {
cout << "key=" << (*iter).first << ",value=" << (*iter).second << endl;
}
}
相关文章:
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 字符串开头的分隔符
- 尝试将 c 字符串数组与分隔符连接起来
- 根据新的行分隔符从字符串中删除子字符串
- 同一分隔符之间的多个子字符串
- 字符串流分隔符
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- C++获取两个分隔符之间的字符串并替换它
- 是否存在像C++中那样带有分隔符的C#原始字符串
- 如何从字符串开头到第二个分隔符中提取子字符串?
- 如何使用两个不同的分隔符拆分字符串
- 将子字符串提取到最后 n 个分隔符C++
- 基于 C++ 中的多个字符串分隔符拆分字符串
- 使用 boost::split 按分隔符的前 N 次匹配来拆分字符串
- 使用分隔符空格解析字符串,但字符串也包含空格
- 获取具有同一分隔符的多个实例的字符串的子字符串
- 具有两个分隔符的字符串流
- 子字符串和分隔符
- 将具有分隔符的字符串拆分为 3 个变量
- C++ 获取两个分隔符字符串之间的字符串