使用正则表达式添加到堆栈
Add to a stack with a regex
我正在学习正则表达式和C++,我想做一个后缀表达式。为此,我想像这样分隔我的字符串:
String : 56*((6+2)/(8-7)* 2^3)
List : 56 | * | ( | (| 6 | + | 2 | ) | / | ( ....
其实我有:
void Stack::findIT() {
std::string var = "56*((6+2)/(8-7)* 2^3)";
std::string str("56*((6+2)/(8-7)* 2^3)");
std::regex r("([0-9]*|[+*\-\/%]|[()])");
std::smatch m;
std::regex_search(str, m, r);
for(auto v: m) std::cout << v << std::endl;
}
我想药丸:标准::堆栈_operators;标准::堆栈_operands;
为此,请使用正则表达式提取字符串但是为什么当我使用此代码时,我有空字符串?
与 std::regex r("([0-9]*|[+*\-\/%]|[()])");
匹配空字符串。
您可能想要:"[0-9]+|[+*/%^()-]"
您还必须迭代搜索:
std::string str("56*((6+2)/(8-7)* 2^3)");
std::regex r("[0-9]+|[+*/%^()-]");
std::smatch m;
while (std::regex_search(str, m, r)) {
std::cout << m[0] << std::endl;
str = m.suffix();
}
演示
要收集字符串中的所有匹配项,您应该真正使用 std::sregex_iterator
.
我建议您使用原始字符串文字,这样您就不必担心在正则表达式中转义:R"~()~"
(表达式位于中间,不需要转义(。
我稍微改变了你的正则表达式。在字符集中,您必须将-
放在开头或结尾(否则它是范围分隔符(。我还添加了读取十进制数字的功能。
std::string str("56*((6+2)/(8-7)* 2^3)");
std::regex r(R"~(d+(:?.d+)?|[-+*/%^]|[()])~");
std::sregex_iterator m_end;
std::sregex_iterator m(std::begin(str), std::end(str), r);
for(; m != m_end; ++m)
std::cout << m->str() << std::endl;
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何使用主参数添加更多堆栈?
- 将在堆栈上声明的元素添加到静态数组
- 堆栈粉碎 在我在代码中添加新变量以及一些操作后C++检测到
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 斯塔克,堆栈,也可以在底部和顶部添加整数
- 如何将模板类添加到堆栈数组?
- 使用正则表达式添加到堆栈
- 如何在C++中将文件路径作为节点添加到树或堆栈中
- 在c++中添加int数组时,试图找出堆栈损坏的问题
- 实现弹出最常添加的项目的堆栈
- 堆栈周围的变量被破坏-添加简单类到std::vector
- 在大解决方案中向类添加成员时发生堆栈溢出错误
- 将异常信息添加到小型转储时,堆栈信息将消失