golang用栈的方式从一段字符串中匹配出{}

yinshidaoshi · 2018-01-24 20:44:16 · 1436 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2018-01-24 20:44:16 的文章,其中的信息可能已经有所发展或是发生改变。

一段字符串中匹配出{},感觉还是没有达到效果,仅仅是找出了括号,但是没有展示出那两个两两匹配

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

1436 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传