Перемена местами букв в слове и поиск совпадений в словаре - Pascal
Формулировка задачи:
С горем пополам написал код для перестановки букв в введенном слове. Как сделать поиск полученных вариантов в словаре слов? Словарь русских слов в тхт формате.
Например: ввожу слово beer
Выдает варинты:
beer
bere
bree
eber
ebre
eebr
eerb
erbe
ereb
rbee
rebe
reeb. Нужно проверить есть ли какой нибудь вариант в словаре.
var a, b: array[1..255] of integer;
s:string;
len, i:integer;
procedure rec(t:integer);
var i:integer;
begin
if t>len then begin
for i:=1 to len do write(chr(b[i]));
writeln();
Exit;
end;
for i:=1 to 255 do
if a[i]>0 then begin
b[t]:=i;
dec(a[i]);
rec(t+1);
inc(a[i]);
end;
end;
begin
writeln('Введите строку');
read(s);
len:=Length(s);
for i:=1 to len do
inc(a[ord(s[i])]);
rec(1);
end.Решение задачи: «Перемена местами букв в слове и поиск совпадений в словаре»
textual
Листинг программы
const DictName='dict-ru.txt'; function DictFind(const s: String): Boolean; var f: Text; t: String; begin Assign(f,DictName); Reset(f); t:=''; while not SeekEoF(f) and (t<s) do ReadLn(f,t); Close(f); DictFind:=t=s; end;
Объяснение кода листинга программы
- Объявляется константа
DictNameсо значениемdict-ru.txt, предположительно содержащая название файла словаря. - Объявляется функция
DictFindс параметромsтипа String, которая возвращает значение типа Boolean. - Внутри функции создается переменная
fтипа Text (для работы с файлом) и переменнаяtтипа String (для хранения данных из файла). - Происходит присваивание файла с именем
DictNameк переменнойf, после чего файл открывается для чтения. - Переменной
tприсваивается пустая строка. - Запускается цикл, который будет читать строки из файла пока файл не достигнет конца или пока строка из файла
tне станет больше или равна строкеs. - После выхода из цикла файл закрывается.
- Функция возвращает значение
t=s, то есть результат проверки на равенство междуtиs.