例如,我有一个关键字“废弃”,我想找到包含此关键字字母的单词,例如“done”,“abandon”,band“,来自我存储这些单词的数组。我怎么能搜索一下?
我尝试编写此代码但无法正常工作。我写了一个带有关键字和单词的函数。然后我将关键字的字母放入关键字列表数组,将字母的字母放入字典数组。
然后我写了一个匹配字母的循环。如果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
答案 0 :(得分:1)
例如,我有一个关键字“废弃”,我想找到包含此关键字字母的单词,例如“done”,“abandon”,band“,来自我存储这些单词的数组。我怎么能搜索一下?
你可以简单地使用关键字作为正则表达式(在Lua中也称为“模式”),使用它的字母作为集合,例如('^[%s]+$'):format('abandoned'):match('done')
。
local words = {'done','abandon','band','bane','dane','danger','rand','bade','rand'}
local keyword = 'abandoned'
-- convert keyword to a pattern and match it against each word
local pattern = string.format('^[%s]+$', keyword)
for i,word in ipairs(words) do
local matches = word:match(pattern)
print(word, matches and 'matches' or 'does not match')
end
输出:
done matches
abandon matches
band matches
bane matches
dane matches
danger does not match
rand does not match
bade matches
rand does not match
答案 1 :(得分:0)
试试这个:
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
答案 2 :(得分:0)
在数组上运行循环并使用string.find
检查这个长字。
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