Golang字母表示的数字

Pet*_*ete 8 string character type-conversion go

有一种简单的方法可以将数字转换为字母吗?

例如,
3=> "C"23=> "W"

icz*_*cza 15

为简单起见,以下解决方案省略了范围检查.
他们都可以在Go Playground尝试.

数字 - > rune

只需将号码添加到常量'A' - 1所以加入1这个你'A',增加2'B'等:

func toChar(i int) rune {
    return rune('A' - 1 + i)
}
Run Code Online (Sandbox Code Playgroud)

测试它:

for _, i := range []int{1, 2, 23, 26} {
    fmt.Printf("%d %q\n", i, toChar(i))
}
Run Code Online (Sandbox Code Playgroud)

输出:

1 'A'
2 'B'
23 'W'
26 'Z'
Run Code Online (Sandbox Code Playgroud)

数字 - > string

或者如果你想要它string:

func toCharStr(i int) string {
    return string('A' - 1 + i)
}
Run Code Online (Sandbox Code Playgroud)

输出:

1 "A"
2 "B"
23 "W"
26 "Z"
Run Code Online (Sandbox Code Playgroud)

最后一个(将数字转换为string)记录在Spec:转换为字符串类型的转换中:

将有符号或无符号整数值转换为字符串类型会生成包含整数的UTF-8表示形式的字符串.

数字 - > string(缓存)

如果您需要多次执行此操作strings,例如将数据存储在数组中是有利可图的,只需string从中返回:

var arr = [...]string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}

func toCharStrArr(i int) string {
    return arr[i-1]
}
Run Code Online (Sandbox Code Playgroud)

注意:切片(而不是数组)也可以.

注2:您可以改善这一点,如果你添加一个虚拟的第一个字符,所以你不必减去1来自i:

var arr = [...]string{".", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}

func toCharStrArr(i int) string { return arr[i] }
Run Code Online (Sandbox Code Playgroud)

数字 - > string(切片string常数)

另一个有趣的解决方案

const abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

func toCharStrConst(i int) string {
    return abc[i-1 : i]
}
Run Code Online (Sandbox Code Playgroud)

切片a string是有效的:新的string将共享支持数组(可以完成,因为strings是不可变的).

  • @afreeland `rune` 在 Go 中是 `int32` 的别名。如果你有一个像“A”这样的常量,它就相当于一个值“65”。`rune` 和 `int32` 类型是一回事,完全可以互换。所以当你写‘'A' + 1`时,就像你写'65 + 1`一样。 (2认同)

art*_*wwl 6

如果您不需要一个符文,而是一个字符串,并且还需要多个字符(例如 excel 列)

package main

import (
    "fmt"
)

func IntToLetters(number int32) (letters string){
    number--
    if firstLetter := number/26; firstLetter >0{
        letters += IntToLetters(firstLetter)
        letters += string('A' + number%26)
    } else {
        letters += string('A' + number)
    }
        
    return 
}

func main() {
    fmt.Println(IntToLetters(1))// print A
    fmt.Println(IntToLetters(26))// print Z
    fmt.Println(IntToLetters(27))// print AA
    fmt.Println(IntToLetters(1999))// print BXW
}

Run Code Online (Sandbox Code Playgroud)

此处预览: https: //play.golang.org/p/GAWebM_QCKi

我还用这个打包了: https: //github.com/arturwwl/gointtoletters