Система программирования Turbo Pascal

            

Длинные строки


h2> StrUpper.

Заголовок:

Function StrLower(Str: PChar): PChar;

Преобразует строчные буквы строки Str к заглавным и возвращает указатель на результат. Функция правильно работает только с латиницей.

Четыре функции модуля Strings (StrLower, StrUpper, StrlComp и StrLIComp) используют преобразование высоты букв и работают корректно только для букв латинского алфавита (латиницы). Для русских букв эти функции можно изменить следующим образом:

{Этот модуль содержит модификацию функций стандартного модуля Strings для работы с кириллицей (альтернативный вариант кодировки}

{$Х+}

Unit StringsR;

INTERFACE

Function LoCase(Ch: Char): Char;

Function UpCase(Ch: Char): Char;

Function StrLower(Str: PChar): PChar;

Function StrUpper(Str: PChar): PChar;

Function StrlComp(Strl, Str2: PChar): Integer;

Function StrLIComp(Strl, Str2: PChar; MaxLen: Word): Integer;

IMPLEMENTATION

Uses Strings;

Function LoCase(Ch: Char): Char;

{Преобразует латинскую или русскую букву Ch к строчной} 

begin 

case Ch of

'A' . .'Z':LoCase:= Chr(ord('a')+ord(Ch)-ord('A'));

'A' . .'П':LoCase:= Chr(ord('a')+ord(Ch)-ord('A'));

'P' . .'Я':LoCase:= Chr(ord('p')+ord(Ch)-ord('P'));

else

LoCase:= Ch

end 

end;

{-------------------}

Function UpCase(Ch: Char): Char;

{Преобразует латинскую или русскую букву Ch к заглавной} 

begin

case Ch of

'a'..'z': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));

'a'..'n': UpCase := Chr(ord('A')+ord(Ch)-ord('a')); 

'p'..'я': UpCase := Chr(ord('P')+ord(Ch)-ord('p'));

else

UpCase:= Ch 

end 

end;

{-------------}

Function StrLower(Str: PChar): PChar;

{Преобразует латинские и русские буквы строки Str к строчным}

var

k: Word; 

begin

for k := 0 to StrLen(Str)-1 do 

Str[k]:= LoCase(Str[k]); 

StrLower:= Str

end;

{-----------}

Function StrUpper(Str: PChar): PChar;

{Преобразует латинские и русские буквы строки Str к заглавным}

var

k: Word; 

begin

for k :=0 to StrLen(Str)-1 do

Str[k]:= UpCase(Str[k]);

StrUpper:= Str

end;

{------------}

Function StrlComp (Str1, Str2 : PChar): Integer; 

{Сравнивает две строки, игнорируя возможную разницу в высоте латинских или русских букв} 

var

k: Word;

Max: Word; 

begin

{Определяем максимальное количество сравниваемых символов как минимум длин строк}

Мах := StrLen(Str1) ;

if StrLen (Str2).<Max then 

Max := StrLen(Str2) ;

{Проверяем символы до первого несовпадения.Буквы преобразуем к заглавным} 

for k := 0 to Max-1 do

if UpCase(Strl[k])<>UpCase(Str2[k]) then 

begin

{Строки не равны}

StrIComp := ord(UpCase(StrlCk]))-ord(UpCase(Str2[k])); 

Exit 

end;

{Разницы нет - результат зависит от совпадения длин} 

StrIComp := StrLen(Str1)-StrLen(Str2)

end;

{--------------}

Function StrLIComp(Str1, Str2: PChar; MaxLen: Word): Integer; 

{Сравнивает не более MaxLen символов строк, проверяя точное соответствие высоты букв} 

var

k. Max: Word; 

begin

{Определяем максимальное количество сравниваемых символов как минимум длин строк и MaxLen}

Мах := MaxLen;

if StrLen(Strl)<Max then Max := StrLen(Strl);

if StrLen(Str2)<Max then Max := StrLen(Str2);

{Проверяем символы до первого несовпадения.Буквы преобразуем к заглавным}

for k := 0 to Max do

if UpCase(Str1 [k])<>UpCase(Str2[k]) then 

begin

StrLIComp := ord(UpCase(Str1[k]))-ord(UpCase(Str2[k])); 

Exit 

end;

{Разницы нет. Если проверено MaxLen символов, строки считаются равными, в противном случае результат зависит от совпадения длин строк} 

if Max=MaxLen then

StrLIComp := 0 

else

StrLIComp := StrLen(Str1)-StrLen(Str2) 

end; 

end.

Если Вы будете использовать этот модуль, ссылайтесь на него в предложении Uses после ссылки на стандартный модуль Strings:

Uses Strings, StringsR, ...



Содержание раздела