有限状态机
作者:互联网
例一
去除一个字符串中连续的空格,即"H__el___lo 变成 H_el_lo"
;
就是相当于使用
flag
定义了不同的状态,进行操作
func main() {
a := "h__el___lo"
str := []byte(a)
flag := 1
for _, v := range str {
switch flag {
case 0:
if v == byte('_') { //还不是字符串
} else { //是字符串
fmt.Print(string(v))
flag = 1
}
case 1: //是字符串
if v == byte('_') { //不是字符串
fmt.Print(string(v))
flag = 0
} else { //还是字符串
fmt.Print(string(v))
}
default:
fmt.Println("输入有误")
}
}
}
//输出结果
h_el_lo
例题二
除连续的空格但字符串中的连续空格不变,比如 h__el__\"wor___ld\"___lo
func main() {
a := "h__el__\"wor___ld\"___lo"
str := []byte(a)
flag1 := 1 //上一个是否是字符串
flag2 := 0 //是否在”“的里面
for _, v := range str {
if v == byte('"') { //修改 flag2 的值
if flag2 == 0 {
flag2 = 1
} else {
flag2 = 0
}
}
flag3 := (v == '_') //flag3不是字符串
switch flag1 {
case 0: //他上一个不是
switch flag2 {
case 0: //不在括号里
if flag3 { //也不是字符串
continue
}
flag1 = 1
fmt.Print(string(v))
case 1: //在括号里
fmt.Print(string(v))
continue //在括号内的都是原样输出
default:
fmt.Println("输出错误")
}
case 1: //他的上一个是字符串
switch flag2 {
case 0: //不在括号里
fmt.Print(string(v))
if flag3 { //不是字符串
flag1 = 0
}
case 1: //在括号里
fmt.Print(string(v))
default:
fmt.Println("输出错误")
}
default:
fmt.Println("输入错误")
}
}
}
//输出结果
h_el_"wor___ld"_lo
参考文献
https://blog.csdn.net/zqixiao_09/article/details/50239337
标签:case,el,有限,fmt,状态机,Print,lo,字符串 来源: https://www.cnblogs.com/rush-peng/p/15056970.html