Консультация № 187480
23.06.2013, 09:37
120.00 руб.
0 5 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Дан текст. Найти слово в тексте, отличающееся не более, чем на два символа. Например: ищем корова - находим крова, карова, кроова и т.д.
Программа на языке Turbo Pascal.

Обсуждение

давно
Профессор
399103
482
23.06.2013, 10:18
общий
Адресаты:
Добрый день. Что представляет из себя "текст"?
Неизвестный
23.06.2013, 11:30
общий
Адресаты:
То есть, или буква другая есть (нет) или порядком букв отличаются? Как и куда (в файл или на экран) выводить результат? Ну а текст - это текстовый файл в "паскалевском смысле"
давно
Посетитель
317729
109
23.06.2013, 12:54
общий
Разместил задачу по просьбе другого человека. Сам особо "не в теме".
Пусть слово отличается порядком букв, а результаты выводятся на экран.
А там пусть сам разбирается. К Вам никаких претензий.
Неизвестный
23.06.2013, 13:07
общий
Адресаты:
Понятно. Если что не так - скажите, исправим
давно
Профессор
399103
482
23.06.2013, 20:15
общий
это ответ
Здравствуйте, Aleksandrkib!

Ожидается, что формат строки -- слова, разделённые пробелом.

Код:

function cutChar(s: String; p: Integer): String;
var
str, ing: String;
begin
str := copy(s, 1, p-1);
ing := copy(s, p+1, length(s));
cutChar := concat(str, ing);
end;

function sameStrings(s1: String; s2: String): boolean;
var
len, i, p: Integer;
begin
sameStrings := false;

len := length(s1);
if len <> length(s2) then exit;

for i := 1 to len do
begin
p := pos(s1[1], s2);
if p = 0 then exit;

sameStrings := sameStrings(cutChar(s1, 1), cutChar(s2, p));
if sameStrings = false then exit;
end;

sameStrings := true;
end;

function difference(s1: String; s2: String): String;
var
len, i, p: Integer;
s: String;
begin
difference := '';

if length(s1) < length(s2) then
begin
s := s1;
s1 := s2;
s2 := s;
end;

if length(s2) = 0 then
begin
difference := s1;
exit;
end;

p := pos(s1[1], s2);
if p = 0 then
difference := concat(difference, s1[1], difference(cutChar(s1, 1), s2))
else
difference := concat(difference, difference(cutChar(s1, 1), cutChar(s2, p)));
end;

procedure writeDifferNoMore(text: String; word: String; dist: Integer);
var
next: String;
spacePos, p: Integer;
diff: String;
begin
while length(text) > 0 do
begin
spacePos := pos(' ', text);
if spacePos > 0 then
p := spacePos
else
p := length(text)+1;
next := copy(text, 1, p-1);

diff := difference(next, word);
if length(diff) <= dist then
write(next, ' ');
delete(text, 1, p);
end;
end;


var
text, word: String;
begin
//write(difference('abc', 'a1b2c'));
write('Введите текст: '); readln(text);
write('Введите слово: '); readln(word);
writeDifferNoMore(text, word, 2);
end.


Примеры вывода:

Введите текст: крова карова кроова ололо пышь пышь
Введите слово: корова
крова карова кроова

Введите текст: можно грабить корованы
Введите слово: корова
корованы
Форма ответа