0

重複の可能性:
LuaでのLZW圧縮

これは、LZW圧縮方式を使用してLuaでデータを圧縮するための私のコードです。私の問題は、関数が完全に圧縮された文字列'TOBEORNOTTOBEORNOT'を返すのではなく、文字'T'を返すことです。ありがとう!

 function compress(uncompressed)
 local dict_size = 256
 local dictionary = {}
   w = ""
   result = {}
     for i = 1, #uncompressed do
       local c = string.sub(uncompressed, i, i)
       local wc = w .. c
       if dictionary[wc] == true then
           w = wc
       else
           dictionary[w] = ""
           dictionary[wc] = dict_size
           dict_size = dict_size + 1
           w = c
       end
     if w then
       dictionary[w] = ""
     end
     return w
   end
 end

 compressed = compress('TOBEORNOTTOBEORTOBEORNOT')
 print(compressed)
4

1 に答える 1

1

ヒント: return wfor ループ内のあなた

いくつかの説明を編集

ループで結果を返す場合、ループは 1 回だけ反復します。最初の繰り返しの終わりに、関数は終了します。それは意味がありません。したがって、return ステートメントは for ループの後に来る必要があります。

また、変数を宣言してresult = {}から使用しないのも疑わしいです。

したがって、ループの後に return ステートメントを配置し、各反復の最後に変数の値を出力することをお勧めします (現在の場所に print ステートメントを配置しますreturn)。これにより、実際に何が起こっているかを確認できます。

于 2012-07-31T17:07:26.123 に答える