class StackError(Exception):
pass
# 节点类
class Node:
def __init__(self, val, next=None):
self.val = val
self.next = next
# 链式栈操作
class LStack:
def __init__(self):
# 标记栈的栈顶位置
self._top = None
def is_empty(self):
# 是否为空
return self._top is None
def push(self, elem):
# 入栈
self._top = Node(elem, self._top)
def pop(self):
# 出栈
if self.is_empty():
raise StackError('Stack is empty')
val = self._top.val
self._top = self._top.next
return val
def top(self):
# 查看栈顶元素
if self.is_empty():
raise StackError('Stack is empty')
return self._top.val
def parent(text, parens):
# 编写生成器,用来遍历字符串,不断地提供括号及其位置
# i 遍历字符串的索引位置
for i in range(len(text)):
if text[i] in parens:
yield text[i], i
def ver(str_):
# 将验证条件提前定义好
parens = '()[]{}' # 特殊处理的字符集
left_parens = '([{' # 入栈字符集
# 验证匹配关系
opposite = {'}': '{', ']': '[', ')': '('}
# 功能函数判断提供的括号是否匹配
print('判断内容是:', str_)
# 存储括号的栈
ls = LStack()
for value, index in parent(str_, parens):
if value in left_parens:
# 左括号入栈
ls.push((value, index))
elif ls.is_empty() or ls.pop()[0] != opposite[value]:
print('出错了第%d个位置,内容是 %s' % (index + 1, value))
break
else:
if ls.is_empty():
print('符合要求')
else:
print('出错了第%d个位置,内容是 %s' % (index + 1, value))
if __name__ == '__main__':
ver('{[]{()((')
python 判断括号是否匹配
最新推荐文章于 2024-03-15 16:26:01 发布