在Lua

2015-12-22 36 views
3

我試圖做一個Lua腳本,需要用逗號分隔的數字的輸入,並把它們轉化成字母轉換一個數字的字母對應,所以1 =一個ECT,但是我還沒有找到一種方法來這樣做很容易,因爲字符串libray輸出a = 97,所以我不知道現在要去哪裏,有什麼幫助?在Lua

回答

3

您可以使用string.bytestring.char功能:

string.char(97) == "a" 
string.byte("a") == 97 

如果你想從 「一」 開始(97),那麼就減去這個數字:

local function ord(char) 
    return string.byte(char)-string.byte("a")+1 
end 

這將返回1 「a」,2表示「b」等等。你可以用類似的方式處理「A」,「B」和其他。

如果您需要數到字符,那麼這樣的事情可能工作:

local function char(num) 
    return string.char(string.byte("a")+num-1) 
end 
+0

'string.char(0.5)== 「1/2」'? [/s](https://en.wikipedia.org/wiki/Sarcasm) – Anko

+0

這是做我想要什麼反轉,我想數爲char不是char到數。 – Alexwall

+0

使用我列出的函數來設計它並不困難;添加到答案中(假設'num'從字符「a」的1開始)。 –

2

僅僅只是佔AZ在ascii table.

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 
+0

好了所以從這裏我有'text = io.read() function convert(...) local ar = {...} local con = {} for i,v pair(ar)do table.insert(CON,( 「」).char(v + 96)) 端 返回CON; 結束 爲I,V在對(轉換(文本))做 打印(V) end' 但是,如果我輸入1,2它的錯誤了 – Alexwall

+0

所以我想我需要做的是轉換字符串io.read()輸出到幾個參數?我不知道 – Alexwall

0

起始值定義您的編碼爲如下:

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 

並使用decodechar[t[i]]

+0

所以,我有'編碼= [[ABCDEFGHIJKLMNOPQRSTUVWXYZ]] I = IO。讀() 函數炭(ⅰ) 返回編碼:子(I,i)的 端 函數解碼(噸) 對於i = 1,#噸做T [1] =炭[I]端 返回表。 concat(t) end print(char(i))'事情是如果我輸入1,2錯誤 – Alexwall

1

或者這些答案,你可以每個字母在表中存儲和簡單的索引的表:

local letters = {'a','b','c'} --Finish 

print(letters[1], letters[2], letters[3])