Программа не выводит ответа

Вопросы программирования и использования среды Lazarus.

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

Программа не выводит ответа

Сообщение Nicmas » 20.02.2022 21:55:48

Здравствуйте, задание такое: Найти в предложении все слова, которые являются палиндромами и вывести их, вот код:
Код: Выделить всё
procedure TFmMain.BtPoiskClick(Sender: TObject);
var
  s, t: string;
  i, p: integer;
begin
  LbExp.Caption := '';
  S := EdMean.Text;
  s += ' ';
  repeat
    p := pos(' ', s);
    i := (p - 1) div 2;
    while (i > 0) and (s[i] = s[p-i]) do dec(i);
    if (i = 0) and (p > 1) then t += copy(s, 1, p);
    delete(s, 1, p)
  until p = 0;
  if length(t) > 0 then LbExp.Caption := t
  else ShowMessage('Палиндромы не найдены')
end;

end.

программа кампилируется, но при вводе шалаш, казак ответа нет, хотя с цифрами работатет
Nicmas
незнакомец
 
Сообщения: 1
Зарегистрирован: 20.02.2022 21:52:19

Re: Программа не выводит ответа

Сообщение RRYTY » 21.02.2022 23:46:19

Если вводить палиндромы латиницей, то тоже работает.
Намек: с национальными наборами символов нужно работать по-другому. Сравните, например, длину строки "kazak" и "казак".
Последний раз редактировалось RRYTY 22.02.2022 07:58:58, всего редактировалось 1 раз.
RRYTY
постоялец
 
Сообщения: 242
Зарегистрирован: 25.12.2021 10:00:32

Re: Программа не выводит ответа

Сообщение zub » 22.02.2022 00:05:45

если не играться с настройками тип string имеет кодировку utf8 -> кириллица в нем "суррогатная", буква занимает больше 1 cudeunit`а
простое решение:
Код: Выделить всё
s, t: string;

замени на
Код: Выделить всё
s, t: unicodestring;

unicodestring - utf16, кориллическая буква занимает 1 cudeunit, проблема уйдет на экзотические символы, для лабв хватит
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Программа не выводит ответа

Сообщение Seenkao » 22.02.2022 00:23:02

zub, проблем с Length не будет?
Seenkao
энтузиаст
 
Сообщения: 554
Зарегистрирован: 01.04.2020 03:37:12

Re: Программа не выводит ответа

Сообщение zub » 22.02.2022 00:36:03

С кириллицей нет. с какимнибудь древне шумерским (или что там есть суррогатное в utf16) будут
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Программа не выводит ответа

Сообщение zoltanleo » 22.02.2022 02:51:28

Странные вы люди. Советуете более сложный способ решения. Я бы посоветовал использовать UTF8Pos, UTF8Lengh и другие UTF8xxxxxxx функции из модуля LazUTF8
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Программа не выводит ответа

Сообщение zub » 22.02.2022 09:57:41

zoltanleo
насколько данный код станет проще))?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Программа не выводит ответа

Сообщение zoltanleo » 22.02.2022 10:24:55

zub
Он будет решен в контексте текущей задачи с учётом текущей кодировки без мутных рассуждений о кодовых единицах и суррогатных парах
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Программа не выводит ответа

Сообщение zub » 22.02.2022 11:04:43

Рассуждения не мутные. Адаптация в лоб фрагмента под UTF8* принесет много накладных расходов из-за постоянных прогонов по codepoint`ам, вместо прямой адресации. UTF8* надо делать по другом. имхо.

но дело житейское))
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Программа не выводит ответа

Сообщение zoltanleo » 22.02.2022 11:13:12

zub
Андрюх, чел лабу делает. Оккама плачет ;)
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Программа не выводит ответа

Сообщение iskander » 22.02.2022 15:09:57

Зря копья ломаете, чел лабу давно сделал.
iskander
энтузиаст
 
Сообщения: 608
Зарегистрирован: 08.01.2012 18:43:34

Re: Программа не выводит ответа

Сообщение zoltanleo » 22.02.2022 15:14:45

iskander
Во, народ тоже за стандартные методы :)
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Программа не выводит ответа

Сообщение iskander » 22.02.2022 15:56:13

Честно говоря, мне попадался гораздо более забавный вариант решения подобной задачи.
iskander
энтузиаст
 
Сообщения: 608
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru