Заменить группы идущих подряд пробелов на одиночные пробелы

      Комментарии к записи Заменить группы идущих подряд пробелов на одиночные пробелы отключены

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

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

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

    questioner
    Участник

    Помогите написать программу на Prolog:

    Считать произвольные предложения и вывести их в форматированном виде, в котором все группы идущих подряд пробелов заменены на одиночные пробелы.

  • #1965

    Если вы используете Turbo или Visual Prolog, предварительно преобразуйте строку в список символов.

    remove_double_spaces([], []):-!.
    remove_double_spaces([Element], [Element]):-!.
    remove_double_spaces([Head_A, Head_B|Tail], StringWithoutDoubleSpaces):-
      is_space(Head_A), is_space(Head_B), !, 
      remove_double_spaces([Head_B|Tail], StringWithoutDoubleSpaces).
    remove_double_spaces([Head_A|Tail], [Head_A|StringWithoutDoubleSpaces]):-
      remove_double_spaces(Tail, StringWithoutDoubleSpaces).

    Если исходная строка пуста или содержит лишь один символ — то из нее нечего удалять, результатом работы должна являться точно такая же строка.
    В противном случае, от строки отделяются два первых символа. Стандартный предикат is_space проверяет являются ли символы пробельными (при его отсутствии можно использовать просто сравнение с символом пробела). Если первые два символа — пробелы, то первый символ отбрасывается, а остальные обрабатываются рекурсивно. В противном случае первый символ должен быть добавлен к результату рекурсивных вычислений.

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