有一种简单的方法可以将数字转换为字母吗?
例如,
3
=> "C"
和23
=> "W"
?
答案 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
}