1

たとえば、「abandoned」というキーワードがあり、それらの単語を格納した配列から、「done」、「abandon」、band」などのこのキーワードの文字を含む単語を検索したいのですが、どうすれば検索できますか?

このコードを書き込もうとしましたが、正しく機能しませんでした。キーワードと単語をとる関数を書きました。次に、キーワードの文字をkeywordletters配列に入れ、単語の文字をwordletters配列に入れます。

次に、文字を照合するためのループを作成しました。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
4

3 に答える 3

1

たとえば、「abandoned」というキーワードがあり、それらの単語を格納した配列から、「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
于 2012-06-26T18:52:03.437 に答える
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
于 2012-06-26T12:14:11.067 に答える
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
于 2012-06-26T12:14:47.960 に答える