C++括号匹配算法:使用栈实现
C++括号匹配算法:使用栈实现
这篇文章介绍如何使用C++中的栈来实现一个简单的括号匹配算法。该算法可以检查包含三种括号的表达式是否平衡:圆括号 (),方括号 [] 和花括号 {}。
代码实现cpp#include #include #include
bool isMatching(char opening, char closing) { if (opening == '(' && closing == ')') return true; else if (opening == '[' && closing == ']') return true; else if (opening == '{' && closing == '}') return true; else return false;}
bool isBalanced(const std::string& sequence) { std::stack
int main() { int n; std::cin >> n;
std::string sequence; for (int i = 0; i < n; ++i) { int operation; std::cin >> operation;
if (operation == 1) { char bracket; std::cin >> bracket; sequence.push_back(bracket); } else if (operation == 2) { if (!sequence.empty()) sequence.pop_back(); } else if (operation == 3) { if (!sequence.empty()) std::cout << sequence.back() << std::endl; } else if (operation == 4) { std::cout << (isBalanced(sequence) ? 'Yes' : 'No') << std::endl; } }
return 0;}
代码解释
-
isMatching(char opening, char closing)函数: 这个函数接受两个字符作为参数,分别表示左括号和右括号。它会检查这两个括号是否匹配。 -
isBalanced(const std::string& sequence)函数: 这个函数接受一个字符串作为参数,表示需要检查的括号序列。 - 首先,创建一个空的栈brackets来存储左括号。 - 遍历输入序列中的每个字符: - 如果遇到左括号,将其压入栈中。 - 如果遇到右括号,检查栈是否为空或栈顶元素是否与当前右括号匹配。如果不匹配,则序列不平衡,返回false。如果匹配,则弹出栈顶元素。 - 最后,如果栈为空,则表示所有括号都匹配,返回true;否则,返回false。 -
main函数: - 读取操作次数n。 - 创建一个空字符串sequence来存储括号序列。 - 循环执行n次操作: - 读取操作类型operation。 - 根据操作类型执行相应操作: -1: 读取一个字符并将其添加到序列末尾。 -2: 如果序列不为空,则删除序列末尾的字符。 -3: 如果序列不为空,则输出序列末尾的字符。 -4: 调用isBalanced函数检查序列是否平衡并输出结果。
总结
这个代码实现了一个简单但有效的括号匹配算法。你可以使用它来检查包含圆括号、方括号和花括号的表达式的语法正确性。
原文地址: https://www.cveoy.top/t/topic/Rs5 著作权归作者所有。请勿转载和采集!