一.字符串逆序打印,比如给出字符串“abcdefg”,要求逆序打印输出“gfedcba”。
完整代码如下:
package main
import "fmt"
func main() {
str := "abcdefg"
fmt.Println("原本字符串:",str)
fmt.Println("方法一逆序后:",way1(str))
fmt.Println("方法二逆序后:",way2(str,0,len(str)-1))
}
//方法一
func way1(str string) string {
bb := []byte(str)
result := make([]byte,0)
for i := len(bb)-1 ;i >=0;i--{
result=append(result,bb[i])
}
strbb := string(result)
return strbb
}
//方法二
func way2(str string,front int,end int) string {
bs := []byte(str)
for front < end{
bs[front],bs[end]=bs[end],bs[front]
front++
end--
}
strbs := string(bs)
return strbs
}
执行结果:
二. 实现句子反转,比如给出“I am a student”,打印输出“student a am I”。完整代码如下:
package main
import "fmt"
func main() {
str :="I am a student"
fmt.Println("原本字符串:",str)
fmt.Println("句子反转后:",word(str))
}
//整个句子反转
func sentence(bs []byte,front int,end int) {
for front < end{
bs[front],bs[end]=bs[end],bs[front]
front++
end--
}
}
//单词反转
func word(str string) string {
by:=[]byte(str) //将传入的字符串转为切片
sentence(by,0,len(by)-1) //将切片中的字符串全部逆序
begin := 0
for i:=0;i<len(by);i++ {
if by[i] == 32 {
sentence(by,begin,i-1)
begin = i+1
}
}
return string(by)
}
执行结果:
三.给出字符串,实现去重。代码如下:
package main
import (
"fmt"
"sort"
)
func main() {
var arr = []string{"hello", "hello","hi", "world", "hi", "china", "hello", "hi"}
d := Remove(arr)
fmt.Println(d)
sort.Strings(d)
fmt.Println(d)
}
//去除重复字符串
func Remove(arr []string) []string {
result := make([]string, 0) //创建一个切片用于存放去重后的结果
for i,_ := range arr{
flag := true
for j,_ := range result{
if arr[i] == result[j] {
flag = false // 存在重复元素,标识为false
break
}
}
if flag {
result = append(result, arr[i])
}
}
return result
}
执行结果:
四. 两个goroutine携程交互打印1,2,3.....10。代码如下:
package main
import (
"fmt"
"time"
)
func groutine1(ch chan int,flag chan bool) {
for i := 1; i <= 10; i++ {
ch <- 100
if i%2 == 1 {
fmt.Println("groutine-1:", i)
}
flag <- true
}
}
func groutine2(ch chan int,flag chan bool) {
for i := 1; i <= 10; i++ {
<-ch
<-flag
if i%2 == 0 {
fmt.Println("groutine-2:", i)
}
}
}
func main() {
ch := make(chan int)
flag :=make(chan bool)
go groutine1(ch,flag)
go groutine2(ch,flag)
time.Sleep(time.Second * 10)
}
执行结果: