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('{[]{()((')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)