2016-06-02 2 views
0

루아에서 나는 다음과 같은 문자열을 가지고 있습니다 : 231 523 402 1223 9043 -1 4에는 공백으로 구분 된 여러 개의 숫자가 들어 있습니다. 이제 int 숫자의 벡터로 변환하고 싶습니다. 몇 가지 기본 제공 함수를 사용하여이를 달성하는 방법은 무엇입니까?루아에서 문자열을 숫자로 변환

답변

0

tonumber을 사용하면 문자열을 숫자로 변환 할 수 있습니다. 를 사용하여 문자열 패턴은 하나 개 이상의 결과의 숫자로 구성되어 임의의 문자열 segmet 일치합니다 문자열 http://www.lua.org/manual/5.3/manual.html#pdf-string.gmatch

local example = "123 321 -2" 
for strNumber in string.gmatch(example, "%d+") do 
    tonumber(strNumber) 
end 

"%d+"에서 숫자를 얻을 수 있습니다.

무료 코드 작성 서비스가 아니기 때문에 마이너스 기호를 찾아서 처리하도록 남겨 두었습니다. 참조를 읽으십시오. 그거 꽤 쉽지.

일단 숫자가 있으면 루아 테이블에 삽입 할 수 있습니다. http://www.lua.org/manual/5.3/manual.html#pdf-table.insert

0

당신이 코드

return {231,523,402,1223,9043,-1,4} 

에 목록을 변환 루아 하드 작업을 할 수 있습니다

s="231 523 402 1223 9043 -1 4" 
t=loadstring("return {"..s:gsub("%s+",",").."}")() 
for k,v in ipairs(t) do print(k,v) end 
+0

어, 아니요. eval은 당신이 그것없이 할 수있는 모든 곳에서 나쁘다. –

+2

@ OlegV.Volkov - 전체 문자열을'^ [- % d % s] + $'패턴과 비교하여 악의적 인 문자열을 검사 할 수 있습니다. 그 패턴에 맞는 악성 문자열을 만들 수 있습니까?)))) –

2

당신은 대체 값과 같은 기능을 string.gsub을 사용할 수 있습니다.

repl이 함수 인 경우이 함수는 매치가 발생할 때마다 캡처 된 하위 문자열을 모두 인수로 전달하여 호출됩니다.

사용의 예는 다음과 같습니다 그것을 사용

local function tovector(s) 
    local t = {} 
    s:gsub('%-?%d+', function(n) t[#t+1] = tonumber(n) end) 
    return t 
end 

이 정직 :

:

local t = tovector '231 523 402 1223 9043 -1 4' 

결과는 (루아 용어 또는 시퀀스) 벡터이다

for i,v in ipairs(t) do print(i,v) end 

1  231 
2  523 
3  402 
4  1223 
5  9043 
6  -1 
7  4 
관련 문제