String 如何在Lua中找到关键字中包含字母的单词?

String 如何在Lua中找到关键字中包含字母的单词?,string,search,lua,String,Search,Lua,例如,我有一个关键字“放弃”,我想从存储这些单词的数组中查找包含该关键字字母的单词,如“完成”、“放弃”、“带”。如何搜索 我试图写这段代码,但没有正常工作。我写了一个函数,它接受关键字和单词。然后我将关键字的字母放入关键字字母数组,并将单词的字母放入单词字母数组 然后我写了一个匹配字母的循环。如果wordletters数组与keywordletters数组中的字母匹配,那么我将当前wordletters元素赋值为nil,然后将keywordletters元素赋值为nil。因为我们不能再次使用它

例如,我有一个关键字“放弃”,我想从存储这些单词的数组中查找包含该关键字字母的单词,如“完成”、“放弃”、“带”。如何搜索

我试图写这段代码,但没有正常工作。我写了一个函数,它接受关键字和单词。然后我将关键字的字母放入关键字字母数组,并将单词的字母放入单词字母数组

然后我写了一个匹配字母的循环。如果wordletters数组与keywordletters数组中的字母匹配,那么我将当前wordletters元素赋值为nil,然后将keywordletters元素赋值为nil。因为我们不能再次使用它

在所有循环之后,我检查了wordletters数组。如果它有一个元素不是nil,那么我返回false。但是,它不能按我所希望的方式工作。你能帮助我吗

编辑:ı我解决了我的问题并相应地编辑了代码

这是我的密码:

  function consistLetters(keyword,word)

keywordletters={ }
    wordletters= { }
local found=false
findLetters(keyword,keywordletters)
findLetters(word,wordletters)


for i=1, #wordletters,1 do
    for j=1, #keywordletters,1 do
        if(keywordletters[j]~="") then
            if(wordletters[i]==keywordletters[j]) then
                keywordletters[j]="" 
                found=true;
                break
            end
         end
    end
    if found~=true then
        return false
    end
   found=false; 
end     

  end
试试这个:

W={"done", "abandon", "band"}
for k,w in pairs(W) do
    W[w]=true
end

function findwords(s)
    for i=1,#s do
        for j=i+1,#s do
            local w=s:sub(i,j)
            if W[w] then print(w) end
        end
    end
end

findwords("abandoned")
如果没有单词数组,可以加载字典:

for w in io.lines("/usr/share/dict/words") do
    W[w]=true
end
试试这个:

W={"done", "abandon", "band"}
for k,w in pairs(W) do
    W[w]=true
end

function findwords(s)
    for i=1,#s do
        for j=i+1,#s do
            local w=s:sub(i,j)
            if W[w] then print(w) end
        end
    end
end

findwords("abandoned")
如果没有单词数组,可以加载字典:

for w in io.lines("/usr/share/dict/words") do
    W[w]=true
end

在数组上运行循环并使用
字符串。查找
以检查此长单词

for idx = 1, #stored_words do
   local word = stored_words[idx]
   if string.find(long_word, word, 1, true) then
      print(word .. " matches part of " .. long_word)
   end
end

在数组上运行循环并使用
字符串。查找
以检查此长单词

for idx = 1, #stored_words do
   local word = stored_words[idx]
   if string.find(long_word, word, 1, true) then
      print(word .. " matches part of " .. long_word)
   end
end
例如,我有一个关键字“弃置”,我想从存储这些单词的数组中查找包含该关键字字母的单词,如“done”、“弃置”、“band”。我如何搜索它

您可以简单地将关键字用作正则表达式(在Lua中称为“pattern”),将其字母作为一个集合使用,例如
('^[%s]+$):format('弃置'):match('done')

输出:

done    matches
abandon matches
band    matches
bane    matches
dane    matches
danger  does not match
rand    does not match
bade    matches
rand    does not match
例如,我有一个关键字“放弃”,我想从存储这些单词的数组中查找包含该关键字字母的单词,如“完成”、“放弃”、“带”。如何搜索

您可以简单地将关键字用作正则表达式(在Lua中称为“pattern”),将其字母作为一个集合使用,例如
('^[%s]+$):format('弃置'):match('done')

输出:

done    matches
abandon matches
band    matches
bane    matches
dane    matches
danger  does not match
rand    does not match
bade    matches
rand    does not match

类似于如果存储的单词数量很大,这将是缓慢的。如果存储的单词数量很大,这将是缓慢的。谢谢你,但我也想找到单词中的字母组成的关键字不一定应该是子字符串。很抱歉,没有给出适当的示例,我给出的所有示例都是子字符串。但是,它应该是还可以找到“dan,爸爸,nad,ded”“如果它们在字典中,并且由关键字的字母组成。@user1463542,哦,这是一个非常不同的问题。我建议你问一个单独的问题。谢谢你,但我还想找到由关键字中的字母组成的单词不一定应该是子字符串。很抱歉没有给出适当的示例,我给出的所有示例都是子字符串。但是,如果“dan,dad,nad,ded”在字典中,并且由关键字的字母组成,它也应该找到它们。@user1463542,哦,这是一个非常不同的问题。我建议你单独问一个问题。