【发布时间】:2021-07-25 16:44:17
【问题描述】:
我正在尝试制作一个 lua 脚本,它输入以逗号分隔的数字,并将它们转换为字母,因此 1 = 等,但是我还没有找到一种方法来轻松地做到这一点,因为字符串 libray 输出= 97,所以我现在不知道该去哪里,有什么帮助吗?
【问题讨论】:
标签: lua
我正在尝试制作一个 lua 脚本,它输入以逗号分隔的数字,并将它们转换为字母,因此 1 = 等,但是我还没有找到一种方法来轻松地做到这一点,因为字符串 libray 输出= 97,所以我现在不知道该去哪里,有什么帮助吗?
【问题讨论】:
标签: lua
您可以使用string.byte 和string.char 函数:
string.char(97) == "a"
string.byte("a") == 97
如果你想从 "a" (97) 开始,那么只需减去那个数字:
local function ord(char)
return string.byte(char)-string.byte("a")+1
end
这将为“a”返回 1,为“b”返回 2,依此类推。你可以让它以类似的方式处理“A”、“B”等。
如果您需要数字到字符,那么这样的方法可能会起作用:
local function char(num)
return string.char(string.byte("a")+num-1)
end
【讨论】:
num 字符“a”从 1 开始)。
仅考虑 ascii table. 中 a-z 的起始值
function convert(...)
local ar = {...}
local con = {}
for i,v in pairs(ar) do
table.insert(con, ("").char(v+96))
end
return con;
end
for i,v in pairs(convert(1,2,3,4)) do
print(v)
end
【讨论】:
text = io.read() function convert(...) local ar = {...} local con = {} for i,v in pairs(ar) do table.insert(con, ("").char(v+96)) end return con; end for i,v in pairs(convert(text)) do print(v) end 但是如果我输入 1,2 就会出错
除了这些答案之外,您可以将每个字母存储在一个表中并简单地索引该表:
local letters = {'a','b','c'} --Finish
print(letters[1], letters[2], letters[3])
【讨论】:
按如下方式定义您的编码:
encoding = [[abc...]]
按你想要的任何顺序。 然后按如下方式使用
function char(i)
return encoding:sub(i,i)
end
如果数字列表在表格中,那么您可以使用
function decode(t)
for i=1,#t do t[i]=char(t[i]) end
return table.concat(t)
end
您也可以将解码保存在表格中:
char = {}
for i=1,#encoding do char[i]=encoding:sub(i,i) end
并在decode 中使用char[t[i]]。
【讨论】:
encoding = [[abcdefghijklmnopqrstuvwxyz]] i = io.read() function char(i) return encoding:sub(i,i) end function decode(t) for i=1,#t do t[i]=char[i] end return table.concat(t) end print(char(i)) 问题是如果我输入 1,2 它会出错