Удаление из второй строки повторных символов из первой

      Комментарии к записи Удаление из второй строки повторных символов из первой отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на строки и файлы Удаление из второй строки повторных символов из первой

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 7 мес. назад.

  • Автор
    Сообщения
  • #3455

    juliia93
    Участник

    Задание:

    Создайте предикат, удаляющий из второй строки все повторные вхождения из первой строки

    Вот у меня получился код для удаления повторяющихся символов из первой строки, как его поменять на нужный?

    domains
    str=string
    predicates
    removeall(char,str,str)
    udalit(str, str)
    clauses
    removeall(_,"","").
    removeall(C,S,R):- 
    frontchar(S,C,RS), 
    removeall(C,RS,R),!.
    removeall(C,S,R):- 
    frontchar(S,Q,RS), 
    removeall(C,RS,RR), 
    frontchar(R,Q,RR).
    udalit("","").
    udalit(S,R):- 
    frontchar(S,A,RS), 
    removeall(A,RS,RRS), 
    udalit(RRS,RR), 
    frontchar(R,A,RR).
    goal
    write("Введите строку"), nl,
    readln(S),
    udalit(S,R), write(R).

  • #3467

    В вашей задаче не нужно удалять повторяющиеся символы из первой строки. Вместо этого, наоборот нужно сформировать из этих элементов список (Repeated), а затем удалить из второй строки все элементы, входящие в этот список. Выбрать повторяющиеся элементы можно с помощью функции repeated_symbols.

    После этого, вам нужно последовательно перебирать символы строкой строки и проверять их наличие среди элементов Repeated. Если символ присутствует — то к результату его добавлять не следует:

    strings_subtraction("", _B, ""):-!.
    strings_subtraction(A, B, AMinusB):-
    frontchar(A, HeadA, TailA),
    symbol_of_string(B, HeadA), !,
    strings_subtraction(TailA, B, AMinusB).
    strings_subtraction(A, B, AMinusB):-
    frontchar(A, HeadA, TailA),
    strings_subtraction(TailA, B, TailAMinusB),
    frontchar(AMinusB, HeadA, TailAMinusB).

    Тогда решение вашей задачи, при условии что исходные строки находятся в переменных A и B, будет выглядеть так:

    repeated_symbols(A, RepeatedA),
    strings_subtraction(B, RepeatedA, X).

Для ответа в этой теме необходимо авторизоваться.