分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
一段字符串中匹配出{},感觉还是没有达到效果,仅仅是找出了括号,但是没有展示出那两个两两匹配
```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)
}```
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1832 次点击
上一篇:go基础
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传