【发布时间】:2020-11-28 20:15:36
【问题描述】:
编辑:我正在寻找一种不使用正则表达式的解决方案,因为它看起来有问题且不可信
只要找到以下符号,我就有以下函数提取字符串的标记:+,-,^,*,!
bool extract_tokens(string expression, std::vector<string> &tokens) {
static const std::regex reg(R"(\+|\^|-|\*|!|\(|\)|([\w|\s]+))");
std::copy(std::sregex_token_iterator(right_token.begin(), right_token.end(), reg, 0),
std::sregex_token_iterator(),
std::back_inserter(tokens));
return true;
}
虽然它运行良好,但直到今天我发现了一个边缘案例,
以下输入:!aaa + ! a 应该返回 !,aaa ,+,!, a 但它返回 !,aaa ,+,"",!, a 请注意 + 和 ! 之间的额外空字符串。
如何防止这种行为?我认为这可以通过正则表达式来完成,
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。