我想通過特定字符拆分字符串而不忽略它們。std :: locale通過特定字符拆分字符串而不會忽略它
例如,如果我有字符串:
「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 ::區域,因爲真正的問題是沒有分裂只使用「=」作爲分隔符:)字符串作爲簡單
編輯:
我想是能夠以同樣的方式下列字符串解析:
"some_tag=some_value"
"some_tag
=
some_value"
"some_tag = some_value"
,並能夠報告在接下來的那些錯誤:
"some_tag some_value"
"some_tag == some_value"
我有一個「some_tag = some_value」的問題。這將被視爲一個沒有方面的字符串。 – Felics
@Felics讓我知道如果我的更新可以幫助請。 – 0x499602D2
@Felics請參閱我的其他更新。 – 0x499602D2