编辑:有人可以添加正则表达式解决方案吗?我正在寻找以下正则表达式:
[\(\)!*-+^]
我有一个函数,可以根据我在正文中声明的特殊字符从文本中提取 token 。该函数有两个问题:
1)不打印特殊字符。
2)当两个特殊字符相邻时输出错误
因此,我进行了更改,从而解决了问题1(从一些测试结果中可以看出)
但是没有解决第二个问题吗?
注意:我使用的是C++ 11标准,而不是希望使用boost
示例:给定:
a+(b*c)
我期望:a,+,(,b,*,c,)
给定:a+b
我期望:a,+,b
给定:ab+
我期望:ab,+
给定:a b+
我期望:a b,+
最佳答案
这是一个正则表达式解决方案,应解析所需的 token :
void find(std::string str)
{
static const std::regex r(R"(\+|\^|-|\*|!|\(|\)|([\w|\s]+))");
std::copy( std::sregex_token_iterator(str.begin(), str.end(), r, 0),
std::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
这是demo。这是一个explanation。
请注意,如果要进行通用分析,这不是一个好主意。正则表达式很快就会变得笨拙(如果还没有的话),并且有很多更好的工具可为您完成此操作。
关于c++ - 如何从字符串中提取 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63284970/