Golang字母表示的数字

时间:2016-04-22 22:03:37

标签: string go type-conversion character

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

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

3 个答案:

答案 0 :(得分:14)

为简单起见,下面的解决方案省略了范围检查 他们都可以在Go Playground上试用。

数字 - > rune

只需将数字添加到常量'A' - 1,然后向其中添加1即可获得'A',添加2即可获得'B'等等。

func toChar(i int) rune {
    return rune('A' - 1 + i)
}

测试它:

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

输出:

1 'A'
2 'B'
23 'W'
26 'Z'

数字 - > string

或者如果您想将其作为string

func toCharStr(i int) string {
    return string('A' - 1 + i)
}

输出:

1 "A"
2 "B"
23 "W"
26 "Z"

最后一个(将数字转换为string)记录在Spec: Conversions to and from a string type中:

  

将有符号或无符号整数值转换为字符串类型会产生一个包含整数的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]
}

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

注意#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] }

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

另一个有趣的解决方案:

const abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

func toCharStrConst(i int) string {
    return abc[i-1 : i]
}

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

答案 1 :(得分:1)

最简单的解决方案是

func stringValueOf(i int) string {
   var foo = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   return foo[i-1]
}

希望这可以帮助您解决问题。快乐编码!!

答案 2 :(得分:1)

如果您不需要符文,而是需要字符串和多个字符,例如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
}

在这里预览:https://play.golang.org/p/GAWebM_QCKi

我也用这个包:https://github.com/arturwwl/gointtoletters