Golang byte与rune的区别,以及如何转String

本文介绍了 Golang 中 byte 和 rune 的区别,byte 等同于 uint8,用于表示英文字符,而 rune 是 uint32,可以表示更广泛的字符,包括中文。通过示例展示了如何将字符串转换为 byte 或 rune 切片,并使用 `string` 函数将其转换回字符串。此外,还讨论了在力扣(LeetCode)问题 893 中使用 rune 切片的原因,因为可以对 rune 进行 ++ 操作,这是 byte 不具备的功能。
摘要由CSDN通过智能技术生成

Golang中byte与rune


byte=uint8,rune=uint32    一个英文字符对应一个byte,一个中文字符对应三个byte。一个rune对应一个UTF-8字符,所以一个中文字符对应一个rune。


package main

import "fmt"

func main(){
    str1:="hello,world"
    a:=[]byte(str1)
    b:=[]uint8(str1)
    //byte==uint8
    fmt.Println("a:",a)//a: [104 101 108 108 111 44 119 111 114 108 100]
    fmt.Println("b:",b)//b: [104 101 108 108 111 44 119 111 114 108 100]
    //rune==uint32
    //记住一点rune能表示的范围更多,比如中文(一个中文占3个字符)等
    str2:="你好,中国"
    c:=[]rune(str2)
    d:=[]byte(str2)
    fmt.Println("c:",c)//c: [20320 22909 44 20013 22269]  中文字符也能拆
    fmt.Println("d:",d)//d: [228 189 160 229 165 189 44 228 184 173 229 155 189]  一个中文拆成3个字符表示4*3+1=13
}

golang中自带的string函数
这个函数接收切片类型的参数,上面的代码片段打印都是int,我们可以换成string进行打印,即

    str2:="你好,中国"
    c:=[]rune(str2)
    d:=[]byte(str2)
    fmt.Println("c:",string(c))//c: 你好,中国
    fmt.Println("d:",string(d))//d: 你好,中国

力扣(893)特殊等价字符串组,遇到的一个特殊场景


题目:

func numSpecialEquivGroups(A []string) int {
    m := make(map[string]bool)
    for _, v := range A {
        count := make([]rune, 52)
        for k1, v1 := range v {
            count[int(v1-'a')+26*(k1&1)]++
        }
        //fmt.Println(count)
        key := string(count)
        //fmt.Println(key)
        m[key] = true
    }
    return len(m)
}

这题是简单题,但是我觉得并不简单,主要是思路并不能一下就想到。


思路:开辟一个52个空间的切片(至于是什么类型的切片,后面再讨论),偶数放前面,奇数+26放后面,然后放入map中,相同的就对value++,不同的就开辟一个新key放入,最后放回len就是题目要的分解个数了。

为什么这里要用[]rune切片?


如果用byte切片,你是没办法直接对他进行++操作的,因为他默认是字符类型,你是没办法直接对字符类型进行++操作的,而rune则可以,还记得前面说的rune能表示的范围更广吗?正因为如此,我可以直接对他进行++操作。之后对切片直接转string就可以当做key了,这里是不是很神奇?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值