【发布时间】:2014-09-13 09:09:29
【问题描述】:
我想通过特定字符分割字符串而不忽略它们。
例如,如果我有字符串:
“some_tag = some_value”
我可以使用此语言环境(从 cppreference 复制/改编)将其拆分为标记:
struct split_by_equal : std::ctype<char>
{
static const mask* make_table()
{
static std::vector<mask> v(classic_table(), classic_table() + table_size);
v['='] |= space;
return &v[0];
}
split_by_equal() : ctype(make_table()){}
};
...
std::stringstream stream("some_tag = some_value");
stream.imbue(std::locale(std::locale::classic(), new split_by_equal));
std::string token;
while(stream>>token)
{
std::cout<<token<<std::endl;
}
这可行,但我不知道“=”是否存在一次、多次或丢失。了解这些信息对于验证输入字符串非常重要。
是否可以在不从流中提取字符的情况下使解析停止?
PS:我想使用std::locale,因为真正的问题并不像只使用'='作为分隔符来拆分字符串那么简单:)
编辑:
我希望能够以相同的方式解析以下字符串:
"some_tag=some_value"
"some_tag
=
some_value"
"some_tag = some_value"
并且能够报告下一个错误:
"some_tag some_value"
"some_tag == some_value"
【问题讨论】: