有没有把数字转换成字母的简便方法?例如,一个月一个月=〉一个月一个月和一个月二个月=〉一个月三个月?
eoigrqb61#
为简单起见,以下溶液省略了范围检查。它们都可以在Go Playground上试用。
rune
简单地把这个数字加到常量'A' - 1上,这样加上1就得到'A',加上2就得到'B'等等:
'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)) }
输出:
string
或者,如果您希望将其作为string:
func toCharStr(i int) string { return string('A' - 1 + i) }
输出:最后一项(将数字转换为string)记录在规范中:与字符串类型之间的转换:将有符号或无符号整数值转换为字符串类型将生成包含整数的UTF-8表示形式的字符串。
如果需要多次执行此操作,则可以将strings存储在数组中,然后从数组中返回string:
strings
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:如果添加一个虚拟的第一个字符,就不必从i中减去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] }
还有另一个有趣的解决方案:
const abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" func toCharStrConst(i int) string { return abc[i-1 : i] }
切片string非常高效:新的X1 M17 N1 X将共享后备数组(可以这样做,因为X1 M18 N1 X是不可变的)。
vmpqdwk32#
如果你不需要一个符文,但一个字符串,也超过一个字符,例如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
4c8rllxm3#
最简单的解决办法是
func stringValueOf(i int) string { var foo = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" return string(foo[i-1]) }
希望这能帮助你解决你的问题。快乐编码!!
3b6akqbq4#
如果你想表示一个大于26(Z)的数,这是最简单的解决方案。给予一试。
func convertToAlphabetic(n int) string { result := "" for n > 0 { mod := (n - 1) % 26 result = string('A'+mod) + result n = (n - mod) / 26 } return result }
示例结果:
4条答案
按热度按时间eoigrqb61#
为简单起见,以下溶液省略了范围检查。
它们都可以在Go Playground上试用。
编号-〉
rune
简单地把这个数字加到常量
'A' - 1
上,这样加上1
就得到'A'
,加上2
就得到'B'
等等:测试:
输出:
编号-〉
string
或者,如果您希望将其作为
string
:输出:
最后一项(将数字转换为
string
)记录在规范中:与字符串类型之间的转换:将有符号或无符号整数值转换为字符串类型将生成包含整数的UTF-8表示形式的字符串。
编号-〉
string
(缓存)如果需要多次执行此操作,则可以将
strings
存储在数组中,然后从数组中返回string
:注意:切片(而不是数组)也可以。
注#2:如果添加一个虚拟的第一个字符,就不必从
i
中减去1
,则可以改进此问题:数字-〉
string
(对string
常量进行切片)还有另一个有趣的解决方案:
切片
string
非常高效:新的X1 M17 N1 X将共享后备数组(可以这样做,因为X1 M18 N1 X是不可变的)。vmpqdwk32#
如果你不需要一个符文,但一个字符串,也超过一个字符,例如excel列
在此预览:https://play.golang.org/p/GAWebM_QCKi
我也用这个包:https://github.com/arturwwl/gointtoletters
4c8rllxm3#
最简单的解决办法是
希望这能帮助你解决你的问题。快乐编码!!
3b6akqbq4#
如果你想表示一个大于26(Z)的数,这是最简单的解决方案。给予一试。
示例结果: