如何在Golang中找到下一个角色?

时间:2015-03-28 22:54:15

标签: go

我只是在golang中对一些算法问题感兴趣。据我所知,在其他语言中按字母顺序查找下一个字符我可以对字符进行位移,因为字符(我想的是C)实际上是一个数字。

所以我尝试了

"a" >> 2

或者那种效果,但存在类型不匹配。

我想知道如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

你试图移动一个字符串,而不是一个字节,比如@Not_a_Golfer说'a'>>2应该可以正常工作。

然而,要获得下一个角色,您可以执行以下操作:

func nextChar(ch byte) byte {
    if ch += 1; ch > 'z' {
        return 'a'
    }
    return ch
}
func main() {
    fmt.Println(string(nextChar('a')))
}

当然,如果您需要的不仅仅是a-z支持,它会更复杂,请查看有关go字符串的unicode软件包和this博文。

答案 1 :(得分:1)

我不确定你认为这会给你“下一个角色”。任何语言都不是这样。 'a' >> 2的作用是:

  • 'a'被解释为int32(97)example
  • >>表示'将X右移Y位'。向右移2位在功能上与整数除以4相同。所以(x >> 2) == (x / 4)。 (example
  • 97 / 4 == 24b字符具有ASCII值98。所以这不会让你在附近。 (example

有关位移的更多信息

当考虑二进制表示法中的数字时,位移是最明显的。对于表达式z = x >> y,我们可以注意以下内容:

x(97):  01100001
y(2):   00000010
        -------- >>
z(24):  00011000

请注意,x中的所有位都只是向右移动了两位。从最后掉落的1被删除。

同样,你可以'向左移动'(<<)。就像x >> 1x / 2相同,x << 1x * 2相同。

表达式:5>>1 == 5/2 == 2

x(5):   00000101
y(1):   00000001
        -------- >>
z(2):   00000010

表达式:5<<1 == 5*2 == 10

x(5):   00000101
y(1):   00000001
        -------- <<
z(10):  00001010

实际上获得下一个角色

如果您希望角色直接跟在'a'之后,只需在其中添加1,如example中所示。