Глава 44, задачи б, в.

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Ответить
Ariman
незнакомец
Сообщения: 9
Зарегистрирован: 04.05.2014 09:07:40

Глава 44, задачи б, в.

Сообщение Ariman »

Есть код из ответов:

Код: Выделить всё

const { типизированные константы для русских букв }
HighChars: string = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
LowChars : string = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
function High(arg: char): char;
var i: integer;
begin
High:= arg;
if arg in ['a'..'z']
then High:= Upcase(arg)
else for i := 1 to Length(LowChars) do
if arg= LowChars[i] then begin
High:= HighChars[i];
break;
end
end;
function Low(arg: char): char;
var i: integer;
begin
Low:= arg;
if arg in ['A'..'Z']
then Low:= Char( Ord(arg) + Ord('z') - Ord('Z') )
else for i := 1 to Length(LowChars) do
if arg= HighChars[i] then begin
Low:= LowChars[i];
break;
end
end;
function HighStr(const arg: string): string;
var i: integer; s: string;
begin
s:='';
for i := 1 to Length(arg) do s:= s+ High(arg[i]);
HighStr:= s;
end;
function LowStr(const arg: string): string;
var i: integer; s: string;
begin
s:='';
for i := 1 to Length(arg) do s:= s+ Low(arg[i]);
LowStr:= s;
end;
begin
Writeln(HighStr('Pascal Паскаль 123'));
Writeln(LowStr('Pascal Паскаль 123'));
Readln;
end.

Получаю вот такой результат работы программы:

Код: Выделить всё

PASCAL ПАСКАЛЬ 123
pascal паёкаль 123

В чем подвох?

P.S. Linux Mint, fpc-2.6.2
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Ariman писал(а):В чем подвох?

Под виндой проверил, всё ОК, ждём подмоги от линуксоидов.
А в текстовый файл вывод направить пробовали?
Ariman
незнакомец
Сообщения: 9
Зарегистрирован: 04.05.2014 09:07:40

Сообщение Ariman »

Oleg_D писал(а):А в текстовый файл вывод направить пробовали?

Попробовал. Результат тот же.
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

Ariman писал(а):В чем подвох?

P.S. Linux Mint, fpc-2.6.2


Ваш исходник в UTF-8, в ней пуковки кодируются так:
#$d0#$a1 - "С",
#$d1#$81 - "с",
#$d0#$81 - "ё".

Вы просматриваете строку не по символам, а побайтно; заменяете #$a1 на #$81, из #$d0#$a1 получаете #$d0#$81 вместо #$d1#$81.
Ariman
незнакомец
Сообщения: 9
Зарегистрирован: 04.05.2014 09:07:40

Сообщение Ariman »

Объясните, пожалуйста, неразумному, как прочитать посимвольно, а не побайтно? И какой тип использовать. Ведь char в Free Pascal исключительно 1 байт. Для строки есть UTF8String, а для символа?
vk_barnaul
незнакомец
Сообщения: 8
Зарегистрирован: 19.09.2015 03:48:21

Сообщение vk_barnaul »

Ariman писал(а):Объясните, пожалуйста, неразумному, как прочитать посимвольно, а не побайтно? И какой тип использовать. Ведь char в Free Pascal исключительно 1 байт. Для строки есть UTF8String, а для символа?

http://wiki.freepascal.org/LCL_Unicode_Support/ru
а если коротко UTF8Copy(твоя_строка,номер_нужного_символа,1)
Ответить