Помощь - Поиск - Пользователи - Календарь
Полная версия: Функция Strupper
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
CORS@R
Нужно было перевести все маленькие символы строки в заглавные. Воспользовался вашей функцией
Function StrUpper(s: String):String;
Var i: Byte;
Begin
For i := 1 To Ord(s[0]) Do
Case s[i] Of
'a' .. 'z': s[i] := Chr(Ord(s[i])-$20);
#160 .. #175: s[i] := Chr(Ord(s[i])-$20);
#224 .. #239: s[i] := Chr(Ord(s[i])-$50)
End;
StrUpper := s
End;

Объясните мне пожалуйста что означает
a' .. 'z': s[i] := Chr(Ord(s[i])-$20);
#160 .. #175: s[i] := Chr(Ord(s[i])-$20);
#224 .. #239: s[i] := Chr(Ord(s[i])-$50)

а именно что такое $20 и &50
Altair
Цитата
а именно что такое $20 и &50

это просто числа записынне в шестандатиричной системе счисленияю (символ $ говорит о hex)
в десятичном представлении это соотвественно 32 и 80
а необходимо это, потому что кода заглавных и строчных символов в таблице ASCII различаются на 32.
А кирилический алфавит имеет разрыв.
Часть его имеет разницу в 32 а часть в 80..

(добавил позже klem4)
можешь изменить на такое:
Case S[I] Of
'a'..'z':S[I]:=Chr(Ord(S[I])-32);
'а'..'п':S[I]:=Chr(Ord(S[I])-32);
'р'..'я':S[I]:=Chr(Ord(S[I])-80)

Тогда и буквы видны какие заменяешь.
klem4
Так что если напрягает, перепеши вот так :

'a' .. 'z': s[i] := Chr(Ord(s[i])-32);
#160 .. #175: s[i] := Chr(Ord(s[i])-32);
#224 .. #239: s[i] := Chr(Ord(s[i])-80)

;)

hex тут имхо для красоты использован ;))
CORS@R
Да нет меня не напрягает, просто я знаю что кириллица имеет разрыв и когда отнимал у меня не совпадал с результатом, вот я и подумал может это что-нибудь эдакое. А это оказалось hex
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.