其他分享
首页 > 其他分享> > golang之翻转字符串

golang之翻转字符串

作者:互联网

解题思路: 以字符串中间字符为中心,遍历交换前后字符来达到翻转的目的, 任何语言都可以这样实现。

我们只需要求出字符串到长度就可以了,请看下面的例子:

	str := "hello世界"
	fmt.Println(len(str))

运行结果:

11

是不是跟你想象的有点不一样。我们都知道在golang中字符串是由[]byte实现的, 求字符串的长度就是求字节数组的长度,而一个中文字符在unicode下占2个字节,在utf-8中占三个字节,golang的默认编码就是utf-8。所以hello世界的长度为11。

那我们如何求我们想要的字符串长度呢?

	str := "hello世界"
	// 方法一
	strArr := []rune(str)
	fmt.Println(len(strArr))
	// 方法二
	fmt.Println(utf8.RuneCountInString(str)) // 调用 unicode/utf8 标准库

运行结果:

7
7

方法一中,我们把字符串转成一个rune数组,rune是个啥?我们看下官方解释

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32

从golang源码中看出,它是int32的别名,对于byte(-128~127),可表示的字符更多。

话不多说,我们回到主题翻转字符串:

package main

import "fmt"

func ReverseString(str string) string {
	strArr := []rune(str)
	for i := 0; i < len(strArr)/2; i++ {
		strArr[len(strArr)-1-i], strArr[i] = strArr[i], strArr[len(strArr)-1-i]
	}
	return string(strArr)
}

func main() {
	str := "hello世界"
	fmt.Println(ReverseString(str))
}

运行结果:

界世olleh

标签:fmt,strArr,len,golang,rune,str,字符串,翻转
来源: https://blog.csdn.net/weixin_42278305/article/details/110186658