一段字符串中匹配出{},感觉还是没有达到效果,仅仅是找出了括号,但是没有展示出那两个两两匹配
```go
package main
import (
"fmt"
"log"
)
//从一段字符串中匹配出{}
type Stack struct {
size int64 //栈的容量
top int64 //栈顶
data []interface{}
}
func MakeStack( size int64) Stack{
s :=Stack{}
s.size=size
s.data =make([]interface{},size)
return s
}
//入栈,空间不足,逐段升高
func (s *Stack) Push(e interface{}) bool{
if s.IsFull(){
log.Printf("栈满,无法入栈")
return false
}
s.data[s.top]=e
s.top++
return true
}
//出栈,栈顶降低
func (s *Stack) Pop() (r interface{},err error){
if s.IsEmpty() {
err =fmt.Errorf("栈已空,无法完成出栈")
log.Printf("栈已空,无法完成出栈")
return
}
s.top--
r =s.data[s.top]
return
}
//判断栈是否满
func (s *Stack) IsFull() bool{
return s.top==s.size
}
//判断栈是否为空
func (s *Stack) IsEmpty() bool{
return s.top==0
}
func (s *Stack) Traverse(fn func(r interface{}),goorto bool) {
//go true遍历进栈 false 遍历出栈
if goorto {
var i int64= 0
for ;i<s.top;i++ {
fn(s.data[i])
}
}else{
for i:=s.top-1;i>=0;i-- {
fn(s.data[i])
}
}
}
func (s *Stack) Mate(str string) {
for _,v:=range str{
s.Push(string(v))
if string(v)=="{"||string(v)=="}"{
fmt.Println(s.Pop())
//fmt.Println(id)
}
}
}
func main() {
str :="{adfd{{zjhgh}luy}"
s :=MakeStack(20)
s.Mate(str)
fmt.Println(s)
}```
有疑问加站长微信联系(非本文作者))