main()
{
char *tokenstring = "a.b";
char o[10],s[10];
sscanf(tokenstring, "%[^'.'].%s", o, s);
printf("%s\n%s\n ", o, s);
}
输出:
a
b
这很好。但我的输入字符串格式各不相同
string tokenstring = a.b;
我正在寻找适用于两种输入的sscaf逻辑。 a.b或a:b或ab
还有一个条件。我有可能我的字符串可能不包含任何分隔符,这意味着单个值。在那种情况下,我希望将单个值放入某个变量中。例如:char * tokenstring =“ab”;类似于result = sscanf(tokenstring, "%[^':']: or [^'.']. %s", o, s);
答案 0 :(得分:1)
sscanf
在这里太过分了,并且为您提供了无法读取的代码。只需使用std::string::find_first_of(".:")
即可。未经测试的代码:
struct ab {
std::string a;
std::string b;
};
ab get_ab(const std::string& str) {
std::string::size_type pos = str.find_first_of(".:");
ab res;
res.a = str.substring(0, pos);
if (pos != std::string::npos)
res.b = str.substring(pos + 1);
}
答案 1 :(得分:0)
将sscanf
与regexp一起使用:
sscanf(tokenstring,“%[^。:]%* [。:]%s”,o,s);
说明:
%[^.:]
匹配所有不是.
或:
的字符。%*[.:]
匹配所有字符.
或:
。 *
表示结果未被捕获到任何参数中。%s
匹配字符串的其余部分。