2014-05-15 2 views
1
a="hello" 
b="hi" 

io.write("enter a or b or both:") 
c=io.read() 

if c=="hello" then  
    print(b)  
elseif c=="hi" then  
    print (a)  
elseif c~=a or b then  
    print ("unknown word")  
end 

문제는 모두 내가 쓸 때 : hello hi, 표시 중입니다. unknown word입니다.하위 문자열을 확인하는 방법

어떻게 해결할 수 있습니까? 나는 또한 과 같은 테이블을 사용해 보았지만 같은 문제가 발생했습니다.

+0

마지막 조건이 불필요하다. 거기에 'else'만 있으면됩니다. 조건은 항상 사실이므로 피해는 없습니다. – Deduplicator

+0

글쎄, 그 사건을 처리하고 싶다면, 둘 다 입력하는 사람을위한 조건을 추가하십시오. (어떤 순서로?/여러 번?) – Deduplicator

+0

나는 콘솔에 볼 수 있도록 두 문자열을 읽을 수 있지만 thnx 언급 할 수 있도록 넣어. – asd32

답변

1

을,이 시도 :

function normalize(x) 
    return " "..x.." " 
end 

mywords=normalize("hello hi") 

function ok(x) 
    return mywords:match(normalize(x))~=nil 

end 

print(ok("hello")) 
print(ok("hi")) 
print(ok("high")) 
3

==은 평등성을 테스트하는 데 사용됩니다. 그러나 문자열 "hello hi""hello"이나 "hi"과 같지 않습니다. 이 문자열을 포함하는 경우 테스트하려면, 패턴 매칭 사용 : 당신이 문자열 대신 단어을 비교하려면

local found = false 
if c:match("hello") then  
    print(a) 
    found = true 
end 
if c:match("hi") then  
    print(b) 
    found = true 
end 
if not found then 
    print ("unknown word")  
end 
+0

정말 고마워, 미안하지만 나는 아직 upvote 수 없습니다. – asd32

+1

예를 들어, 'hi'와 'high'를 혼동하게됩니다. – lhf

+0

맞는지, 부분 문자열 **이 의미하는 바에 따라 올바른지 여부는 질문에서 분명하지 않습니다. –

관련 문제