Проверка на латиницу и кириллицу (Lazarus)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Есть стандартное поле ввода (TEdit) и TLabel, в Caption которого выводиться результат. Нужно осуществить проверку языка строки, которую ввел пользователь. То есть, если строка на английском, то производим одни действия, если строка на русском (украинском) - другие. С латиницей, вроде как, всё понятно, то бишь, проверяем входит ли i-й символ в диапазон латинских однобайтовых символов, а вот, что делать в случае с кириллическими - непонятно. Буду благодарен за помощь Примерно, такая структура
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;
Параметром userStr будет передаваться некий буффер для того, что пользователь вводит в Edit, и в дальнейшем выводиться в TLabel.Caption, с некоторыми модификациями.

Решение задачи: «Проверка на латиницу и кириллицу (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;

Объяснение кода листинга программы

  1. Объявлены две строки: enAlpha и ruAlpha. Обе содержат алфавиты: латинский и кириллический соответственно.
  2. Создана функция WhatLang(s : string) : string.
  3. Внутри функции объявлены следующие переменные: i, ch, countRu, countEn.
  4. В цикле for перебираются все символы входной строки s.
  5. Для каждого символа выполняется следующая последовательность действий:
    • Приводится к нижнему регистру с помощью функции LowerCase.
    • Проверяется наличие символа в латинском алфавите с помощью функции UTF8Pos. Если символ найден, увеличивается счетчик countEn.
    • Если символ не найден в латинском алфавите, проверяется наличие символа в кириллическом алфавите с помощью функции UTF8Pos. Если символ найден, увеличивается счетчик countRu.
  6. После завершения цикла выполняется проверка: если countEn > 0 и countRu = 0, то Result := 'ENG'.
  7. Если countEn = 0 и countRu > 0, то Result := 'RU'.
  8. Если ((countEn > 0) and (countRu > 0)) or ((countEn = 0) and (countRu = 0)), то Result := 'FALSE'.
  9. Конец функции.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы