• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Фразы палиндромы

  • Автор темы ilsen
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

ilsen

Помогите плз, задание такое:
Имеется большой словарь русских слов. Найти в нем слова-палиндромы («перевертыши»), одинаково читающиеся как слева направо, так и справа налево, например, АННА, ШАЛАШ и так далее. В словаре встречаются не только слова-палиндромы, но и фразы-палиндромы, например: «А роза упала на лапу Азора». Найти и их.

В delphi я на форму нанес memo, в которое загружаю все слова из файла. Также кнопку для поиска палиндромов и edit в котором отображаю результат.
Вот код программы:
Код:
var const dividers=[' ',',','.',';',':','-','=','+'];
...
function Pa(s:string):boolean;
var
i:integer;
fl:boolean;
begin
fl:=true;
for i:=1 to length(s)div 2 do
if s[i]<>s[length(s)-i+1] then
fl:=false;
Result:=fl
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
s,temp:string;
i:integer;
begin
s:=memo1.Text;
temp:='';
{пробегаем всю строку посимвольно}
for i:=1 to length(s) do
begin
if not (s[i] in dividers) then
temp:=temp+s[i]; {записываем одним словом}
end;
temp:=ansilowercase(temp); {все буквы делаем маленькими}
if Pa(temp)then
edit1.text:=temp; {в edit результат}
end;
А как искать несколько слов или даже несколько фраз?
 
D

Dock1100

А как в словаре записаны слова/фразы?
Kаждое с новой строки, или через какойто символ(,./)?

Если каждое слово с новой строки, то добавь на форму еще одно memo с именем memo2 и
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
s,temp:string;
i:integer;
begin
memo2.clear;
for i:=0 to memo1.Lines.Count-1 do
if Pa(ansilowercase(memo1.Lines[i])) then memo2.lines.add(memo1.Lines[i]);
end;
 
I

ilsen

Kаждое слово и фраза с новой строки. По словам ищет, а вот фразы нет
 
I

ilsen

напиши "а роза упала на лапу азора", программа не видит фразу как палиндром
Как сделать чтобы программа в каждой строке удаляла знаки препинания и лепила слова, т.е. сделала из "а роза упала на лапу азора" - "арозаупаланалапуазора" и тогда она увидит что это палиндром
 
D

Dock1100

Попробуй так:
Код:
const dividers:array[0..7] of char = (' ',',','.',';',':','-','=','+');
...

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i,j:integer;
begin
memo2.clear;
for i:=0 to memo1.Lines.Count-1 do
begin
s:=ansilowercase(memo1.Lines[i]);
for j := 0 to 7 do
s:=stringreplace(s,dividers[j],'',[rfReplaceAll]);
if Pa(s) then memo2.lines.add(memo1.Lines[i]);
end;
end;
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!