Последняя версия DataExpress 3 beta от 10 июня 2020 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Расширения
ИзображениеИзображениеИзображение

Палиндром

Все вопросы, связанные с работой в дизайнере.
Аватара пользователя
Runenkov
Интересующийся
Сообщения: 106
Зарегистрирован: Ср сен 21, 2016 9:15 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

Палиндром

Сообщение Runenkov » Пн июн 29, 2020 3:30 pm

Доброго дня!

Помогите разобраться с кодировками! Что-то не так пошло...

Накропал маленькое расширение, с функцией создания палиндрома из строки.
На латинице все хорошо, а русские буквы ведут себя странно..

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

function Palindrome(S: String): String;
var I,N: Integer;
begin
  N := Length(S);
  for I :=  N-1 downto 1 do
    begin;
      S := S + StrGet(S,I);
    end;
  Result := S;
end;


Где-то в StrGet что-то неправильно...

Пример:
ПАЛИНДРОМ.zip
(46.56 КБ) 30 скачиваний

Аватара пользователя
admin
Разработчик
Сообщения: 4989
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 38 раз
Поблагодарили: 285 раз

Палиндром

Сообщение admin » Пн июн 29, 2020 5:00 pm

Используйте utf8copy вместо strget, русские буквы занимают больше одного байта.

Аватара пользователя
Runenkov
Интересующийся
Сообщения: 106
Зарегистрирован: Ср сен 21, 2016 9:15 pm
Благодарил (а): 11 раз
Поблагодарили: 8 раз

Палиндром

Сообщение Runenkov » Вт июн 30, 2020 3:54 pm

Спасибо, получилось!

Правда, замечено другое:
в русском тексте последняя буква удваиваевается, в латинском -- нет
арозаупаланналапуазора
arozaupalanalapuazora

впрочем, это для развлечения и строку все равно корректировать потом...

Аватара пользователя
Develop-Soft
Сообщения: 1621
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 122 раза
Поблагодарили: 438 раз
Контактная информация:

Палиндром

Сообщение Develop-Soft » Чт июл 02, 2020 4:44 pm

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

function Palindrome(S: WideString): String;
var I,N: Integer;
begin
  N := Utf8Length(S);
  for I :=  N-1 downto 1 do
    begin;
      S := S + wStrGet(S,I);
    end;
  Result := S;
end;