在一个用字符串描述的表达式“([(a+b)]/f+(ctd)”中存在大、中、小括号。请编写一组程序,基于栈,实现对输入的一串字符串的依次扫描,并检查括号匹配是否成功 (1)输入样例:(0)0(hllo)((worla)())) 输出样例:括号匹配成功 (2)输入样例:(0X)(helllo)(worla)()) 输出样例:括号匹配失败
时间: 2023-07-30 10:10:05 浏览: 45
下面是基于栈的括号匹配检查的 Python 代码实现:
```python
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
def check_parentheses(expression):
stack = Stack()
for char in expression:
if char in "([{":
stack.push(char)
elif char in ")]}":
if stack.is_empty():
return False
else:
top_char = stack.pop()
if (char == ")" and top_char != "(") or \
(char == "]" and top_char != "[") or \
(char == "}" and top_char != "{"):
return False
return stack.is_empty()
expression = input("请输入表达式:")
if check_parentheses(expression):
print("括号匹配成功")
else:
print("括号匹配失败")
```
该程序使用一个栈来存储左括号,遇到右括号时,则弹出栈顶的左括号,检查两个括号是否匹配(即是否是同种类型的括号),如果匹配则继续扫描,否则返回括号匹配失败。如果遍历完整个表达式后,栈为空,则表示括号匹配成功,否则表示括号匹配失败。