数的Golang字母表示法

xlpyo6sf  于 2023-03-21  发布在  Go
关注(0)|答案(4)|浏览(153)

有没有把数字转换成字母的简便方法?
例如,
一个月一个月=〉一个月一个月和一个月二个月=〉一个月三个月?

eoigrqb6

eoigrqb61#

为简单起见,以下溶液省略了范围检查。
它们都可以在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))
}

输出:

编号-〉string

或者,如果您希望将其作为string

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

输出:
最后一项(将数字转换为string)记录在规范中:与字符串类型之间的转换:
将有符号或无符号整数值转换为字符串类型将生成包含整数的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:如果添加一个虚拟的第一个字符,就不必从i中减去1,则可以改进此问题:

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非常高效:新的X1 M17 N1 X将共享后备数组(可以这样做,因为X1 M18 N1 X是不可变的)。

vmpqdwk3

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

4c8rllxm

4c8rllxm3#

最简单的解决办法是

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

希望这能帮助你解决你的问题。快乐编码!!

3b6akqbq

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
}

示例结果:

  • 3:C
  • 32:房颤
  • 第876章:秘密行动

相关问题