Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перевод символа в верхний регистр для русского алфавита

Delphi , Синтаксис , Текст и Строки

Перевод символа в верхний регистр для русского алфавита


function UpCaseRus(ch: Char): Char;
asm
  CMP   AL,'a'
  JB    @@exit
  CMP   AL,'z'
  JA    @@Rus
  SUB   AL,'a' - 'A'
  RET
@@Rus:
  CMP   AL,'я'
  JA    @@Exit
  CMP   AL,'а'
  JB    @@yo
  SUB   AL,'я' - 'Я'
  RET
@@yo:
  CMP   AL,'¸'
  JNE   @@exit
  MOV   AL,'¨'
@@exit:
end;


function LoCaseRus( ch : Char ) : Char;
{Перевод символа в нижний регистр для русского алфавита}
asm
  CMP          AL,'A'
  JB              @@exit
  CMP          AL,'Z'
  JA              @@Rus
  ADD          AL,'a' - 'A'
  RET
@@Rus:
  CMP          AL,'Я'
  JA              @@Exit
  CMP          AL,'А'
  JB              @@yo
  ADD          AL,'я' - 'Я'
  RET
@@yo:
  CMP          AL,'¨'
  JNE            @@exit
  MOV          AL,'¸'
@@exit:
end;

Рецензия и перевод кода:

Код предоставляет две функции, UpCaseRus и LoCaseRus, которые конвертируют одиночный символ в верхний или нижний регистр для русского алфавита. Функции используют ассемблерный язык для выполнения конвертации.

UpCaseRus

Функция принимает символ ch в качестве входного параметра и возвращает его верхнюю форму, если он является нижним регистром в русском алфавите. Если входной символ не является нижним регистром, функция возвращает оригинальный символ без изменений.

Разбивка кода:

  1. CMP AL,'a': Сравниваем ASCII-значение входного символа AL с ASCII-значением 'a'.
  2. JB @@exit: Если входной символ меньше 'a', прыгаем к метке @@exit.
  3. CMP AL,'z': Сравниваем ASCII-значение входного символа AL с ASCII-значением 'z'.
  4. JA @@Rus: Если входной символ больше 'z', прыгаем к метке @@Rus.
  5. SUB AL,'a' - 'A': Вычитаем ASCII-значение 'a' из ASCII-значения 'A'. Это эффективно конвертирует нижний регистр в верхний.
  6. RET: Возвращаем преобразованный символ.

LoCaseRus

Функция принимает символ ch в качестве входного параметра и возвращает его нижнюю форму, если он является верхним регистром в русском алфавите. Если входной символ не является верхним регистром, функция возвращает оригинальный символ без изменений.

Разбивка кода:

  1. CMP AL,'A': Сравниваем ASCII-значение входного символа AL с ASCII-значением 'A'.
  2. JB @@exit: Если входной символ меньше 'A', прыгаем к метке @@exit.
  3. CMP AL,'Z': Сравниваем ASCII-значение входного символа AL с ASCII-значением 'Z'.
  4. JA @@Rus: Если входной символ больше 'Z', прыгаем к метке @@Rus.
  5. ADD AL,'a' - 'A': Добавляем разницу между ASCII-значениями 'a' и 'A' к входному символу. Это эффективно конвертирует верхний регистр в нижний.
  6. RET: Возвращаем преобразованный символ.

Альтернативное решение

Вместо использования ассемблерного языка можно использовать встроенные функции Pascal для конвертации символов в верхний или нижний регистр. Вот альтернативная реализация:

function UpCaseRus(ch: Char): Char;
begin
  Result := Uppercase(ch);
end;

function LoCaseRus(ch: Char): Char;
begin
  Result := Lowercase(ch);
end;

Эта реализация более легко читаемая и поддерживаемая, но может быть менее эффективной, чем оригинальный код на ассемблере.

Статья описывает функции UpCaseRus и LoCaseRus на языке Паскаль, реализующие перевод символов русского алфавита в верхний и нижний регистр соответственно.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:26:41/0.0036680698394775/0