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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值