Lua,前进到下一个字母

我非常惊讶在 StackOverflow 上或 Lua.org 网站上没有明确回答这个问题。

如果

  • 我的 Lua 变量包含一个字母,且
  • 我想要字母表中的下一个字母

那么,我该如何操作该变量以将其从“J”更改为“K”?

我查看了 String Library 页面,但在其中没有看到“字母表”一词。

例如,

 --------------------------------------------------
 --                                              --
 --    Func Name: Alphabetic_Advance_By_1        --
 --                                              --
 --    On Entry:  The_Letter contains one        --
 --               character. It must be a        --
 --               letter in the alphabet.        --
 --                                              --
 --    On Exit:   The caller receives the        --
 --               next letter                    --
 --                                              --
 --               e.g.,                          --
 --                                              --
 --               A will return B                --
 --               B will return C                --
 --               C will return D                --
 --                                              --
 --               X will return Y                --
 --               Y will return Z                --
 --               Z will return A                --
 --                                              --
 --                                              --
 --                                              --
 --------------------------------------------------

 function Alphabetic_Advance_By_1(The_Letter)

 local Temp_Letter

 Temp_Letter = string.upper(The_Letter)

 -- okay, what goes here ???

 return(The_Answer)

 end
点赞
用户501459
用户501459

我感到非常惊讶,居然在StackOverflow或Lua.org网站上都没有明确回答这个问题。

这与Lua的构建中所使用的字符编码有关,因此超出了Lua语言本身的范围。

您可以使用string.byte获取字符串的字节。您可以使用string.char将字节转换为字符串。

Lua不保证“ A”到“ Z”的字符代码是连续的,因为C语言并不保证。您甚至不能确定每个字符是否使用单个字节表示。如果您的实现是使用ASCII,则每个字符都由单个字节值表示,您可以添加1来获取下一个字母,但您不应该依赖此特性。例如,如果Temp_Letter < 'Z':

The_Answer = string.char(Temp_Letter:byte() + 1)

以下是一种不依赖字符编码的方法:

local alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
local index = alphabet:find(Temp_Letter)
if index then
    index = (index % #alphabet) + 1 -- 移动到下一个字母,当到达末尾时循环
    TheAnswer = alphabet:sub(index, index)
end
2014-04-16 21:54:01