similar_text() в lua

BARRY BRADLEY

Известный
Автор темы
709
177
Версия MoonLoader
Другое
В PHP есть функция similar_text()
int similar_text(string str_first, string str_second [, double percent])
Определяет схожесть двух строк по алгоритму Оливера. Возвращается число символов, совпавших в строках str_second и str_first. Третий параметр необязателен — он передаётся по ссылке, плюс в нём сохраняется совпадение строк в процентах.

<?
$str1 = "Hello, world!";
$str2 = "Hello!";
$var = similar_text($str1,$str2);
$var1 = similar_text($str1, $str2, &$tmp);
// параметр $tmp передаем по ссылке
echo("Результат выполнения функции similar_text()
для строк $str и $str1 в числе символов:");
echo("<br>"); echo("$var"); echo("<br>");
echo("и в процентах:"); echo("<br>");
echo($tmp); // для вывода информации в % происходит обращение к $tmp
?>
Результат выполнения функции similar_text() для строк Hello, world! и Hello! в числе символов:
6
и в %:
63.157894736842

Ни у кого нет схожей функции на lua? В интернете не увидел..
 
Решение
Lua:
local str1 = "Hello, world!"
local str2 = "Hello!"


function stringComparison(first, second) -- input: two strings, output: table (count, percentage)
    local count = 0
    local second_array = {}
    for i in string.gmatch(second, ".") do --turning into an array
        table.insert(second_array, i)
    end
    local first_array = {}
    for i in string.gmatch(first, ".") do
        table.insert(first_array, i)
    end
    
    local first_sorted = {}
    local second_sorted = {}
    
    if #first_array > #second_array then -- swap arrays if the first array is greater than the second
        first_sorted = second_array
        second_sorted = first_array
    else 
        first_sorted = first_array
        second_sorted =...

invilso.

Известный
259
89
Lua:
local str1 = "Hello, world!"
local str2 = "Hello!"


function stringComparison(first, second) -- input: two strings, output: table (count, percentage)
    local count = 0
    local second_array = {}
    for i in string.gmatch(second, ".") do --turning into an array
        table.insert(second_array, i)
    end
    local first_array = {}
    for i in string.gmatch(first, ".") do
        table.insert(first_array, i)
    end
    
    local first_sorted = {}
    local second_sorted = {}
    
    if #first_array > #second_array then -- swap arrays if the first array is greater than the second
        first_sorted = second_array
        second_sorted = first_array
    else 
        first_sorted = first_array
        second_sorted = second_array
    end
    
    for key, value in ipairs(first_sorted) do
        for key2, value2 in ipairs(second_sorted) do
            if value == value2 then
                count = count + 1
                break
            end
        end
    end
    return {count = count, percentage = count / #second_sorted*100}
end


local result = stringComparison(str1, str2)
print(result.count)
print(result.percentage)
Такое поведение ожидается от функции?
 
Последнее редактирование:
  • Нравится
Реакции: BARRY BRADLEY