Помощь - Поиск - Пользователи - Календарь
Полная версия: рекурсивно сравнить строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
lopata
Нужно написать Рекурсивную функцию Matching(p,s ), которая сравнивает 2 строки, возвращает значениеTRUE , если p и s совпадают, и FALSE если нет. При этом разбивает p и s на Первый знак и остаток.
Насколько понимаю, должны сравниваться только первые знаки, а из остатка, выбираться этот первый знак
Вот что получилось, неверно, конечно, но мне кажется нужно приблизительно делать так:

FUNCTION Matching(p,s : string): boolean;
begin
IF (Length(p) and Length(s))=0 THEN
Matching := True
else
matching := (p[1]=s[1]) and Matching(copy(p,2,length(p)-1),copy(s,2,length(s)-1));
end;

volvo
Цитата
IF (Length(p) and Length(s))=0 THEN
делает совсем не то, что тебе хочется... Тут берется битовое представление одного числа, такое же битовое представление другого, с ними производится операция AND, и результат сравнивается с нулем... В результате, если длина строки P равна 3, а длина S = 4, то результатом будет 0, поскольку 0011 AND 0100 = 0000.

Если хочешь сравнить длины строк с нулем - сравнивай их по отдельности...

Я бы сделал так:
function equals(const s, p: string): boolean;
begin
  if (length(s) = 0) or (length(p) = 0) then
    equals := length(s) = length(p)
  else
    equals := (s[1] = p[1]) and equals(copy(s, 2, 255), copy(p, 2, 255))
end;
lopata
Понятно. Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.