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
上一篇:go 字符串


下一篇:Python之路第八天,基础(9)-面向对象(下)