Страница 1 из 1

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

СообщениеДобавлено: 08.10.2015 19:28:33
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

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

СообщениеДобавлено: 11.10.2015 11:35:05
Oleg_D
Ariman писал(а):В чем подвох?

Под виндой проверил, всё ОК, ждём подмоги от линуксоидов.
А в текстовый файл вывод направить пробовали?

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

СообщениеДобавлено: 11.10.2015 13:28:31
Ariman
Oleg_D писал(а):А в текстовый файл вывод направить пробовали?

Попробовал. Результат тот же.

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

СообщениеДобавлено: 12.10.2015 00:02:17
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.

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

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

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

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

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