Проверка на латиницу и кириллицу (Lazarus)
Формулировка задачи:
Добрый вечер. Есть стандартное поле ввода (TEdit) и TLabel, в Caption которого выводиться результат. Нужно осуществить проверку языка строки, которую ввел пользователь. То есть, если строка на английском, то производим одни действия, если строка на русском (украинском) - другие. С латиницей, вроде как, всё понятно, то бишь, проверяем входит ли i-й символ в диапазон латинских однобайтовых символов, а вот, что делать в случае с кириллическими - непонятно. Буду благодарен за помощь
Примерно, такая структура
Параметром userStr будет передаваться некий буффер для того, что пользователь вводит в Edit, и в дальнейшем выводиться в TLabel.Caption, с некоторыми модификациями.
type engAlphabetSet = set of char; var engAlph : engAlphabetSet = [ 'A'..'Z', 'a'..'z']; //... function WhatLanguage(userStr: string): string; var i : byte; size : byte = Length(userStr); countLat : byte = 0; countCyr : byte = 0; begin for i := 1 to size do begin if(userStr[i] in engAlph) then begin countLat := countLat + 1; end; if({проверка на кириллицу}) then begin countCyr := countCyr + 1; end; end; if((countLat > 0) and (countCyr = 0)) then WhatLanguage := 'ENG'; if((countLat = 0) and (countCyr > 0)) then WhatLanguage := 'RU'; if(((countLat > 0) and (countCyr > 0)) or ((countEng = 0) and (countCyr = 0))) then WhatLanguage := 'FALSE'; end;
Решение задачи: «Проверка на латиницу и кириллицу (Lazarus)»
textual
Листинг программы
var enAlpha : string = 'abcdefghijklmnopqrstuvwxyz'; ruAlpha : string = 'абвгдеёжзийклмнопрстуфхцчшщьъыэюя'; function WhatLang(s : string) : string; var i : integer; ch : string; countRu, countEn : integer; begin countRu := 0; countEn := 0; for i := 1 to UTF8Length(s) do // uses LazUTF8 begin ch := LowerCase(UTF8Copy(s, i, 1)); if UTF8Pos(ch, enAlpha) > 0 then inc(countEn) else if UTF8Pos(ch, ruAlpha) > 0 then inc(countRu) end; if((countEn > 0) and (countRu = 0)) then Result := 'ENG'; if((countEn = 0) and (countRu > 0)) then Result := 'RU'; if(((countEn > 0) and (countRu > 0)) or ((countEn = 0) and (countRu = 0))) then Result := 'FALSE'; end;
Объяснение кода листинга программы
- Объявлены две строки: enAlpha и ruAlpha. Обе содержат алфавиты: латинский и кириллический соответственно.
- Создана функция WhatLang(s : string) : string.
- Внутри функции объявлены следующие переменные: i, ch, countRu, countEn.
- В цикле for перебираются все символы входной строки s.
- Для каждого символа выполняется следующая последовательность действий:
- Приводится к нижнему регистру с помощью функции LowerCase.
- Проверяется наличие символа в латинском алфавите с помощью функции UTF8Pos. Если символ найден, увеличивается счетчик countEn.
- Если символ не найден в латинском алфавите, проверяется наличие символа в кириллическом алфавите с помощью функции UTF8Pos. Если символ найден, увеличивается счетчик countRu.
- После завершения цикла выполняется проверка: если countEn > 0 и countRu = 0, то Result := 'ENG'.
- Если countEn = 0 и countRu > 0, то Result := 'RU'.
- Если ((countEn > 0) and (countRu > 0)) or ((countEn = 0) and (countRu = 0)), то Result := 'FALSE'.
- Конец функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д