История изменений
Исправление LightDiver, (текущая версия) :
Да делал я циклом. Так дольше и длиннее. Сейчас попробую циклом и сравню. Я вчера целый день этим занимался.
Ты про что то такое?
function utf8myLen(s)
local count = 0
local i = 1
while i <= #s do
local byte = string.byte(s, i)
-- Проверяем первый байт символа:
if byte < 128 then
-- ASCII символ (один байт)
count = count + 1
i = i + 1
elseif byte >= 194 and byte <= 244 then
-- Многосимвольный UTF-8 символ
-- Определяем длину символа по первому байту
local len
if byte <= 223 then
len = 2
elseif byte <= 239 then
len = 3
else
len = 4
end
-- Увеличиваем счётчик символов
count = count + 1
-- Пропускаем все байты текущего символа
i = i + len
else
-- Некорректный байт, пропускаем
i = i + 1
end
end
return count
end
[22:37]Прошло: 0.0010000001639128
[22:38]Прошло: 1.160000000149
[22:41]Прошло: 2.7669999999925
Первое: #строка Второе: моя функцию на регулярках Третье: на циклах
Исправление LightDiver, :
Да делал я циклом. Так дольше и длиннее. Сейчас попробую циклом и сравню. Я вчера целый день этим занимался.
Ты про что то такое?
function utf8myLen(s)
local count = 0
local i = 1
while i <= #s do
local byte = string.byte(s, i)
-- Проверяем первый байт символа:
if byte < 128 then
-- ASCII символ (один байт)
count = count + 1
i = i + 1
elseif byte >= 194 and byte <= 244 then
-- Многосимвольный UTF-8 символ
-- Определяем длину символа по первому байту
local len
if byte <= 223 then
len = 2
elseif byte <= 239 then
len = 3
else
len = 4
end
-- Увеличиваем счётчик символов
count = count + 1
-- Пропускаем все байты текущего символа
i = i + len
else
-- Некорректный байт, пропускаем
i = i + 1
end
end
return count
end
Исходная версия LightDiver, :
Да делал я циклом. Так дольше и длиннее. Сейчас попробую циклом и сравню. Я вчера целый день этим занимался.