Посчитать количество определенных символов в строке

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

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

Помечено: ,

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

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

    questioner
    Участник

    Не могли бы вы помочь с еще одной задачкой?

    подсчитать число определенных символов в строке

    Я думаю, что надо строку представлять как список и выполнять поиск.

    такая реализация почему-то ошибку выдает:

    count_symbol_string([], _Symbol, 0):-!.
    count_symbol_string([Head|Tail], Symbol, Count):-
        Head = Symbol,
        TailCount = Count - 1,
        count_symbol_string(Tail, Symbol, TailCount).

  • #1892

    Если Вы используете Турбо-пролог, то надо использовать функции типа front_char при обработке строк. Но если строка предствлена как список символов (в GNU Prolog/SWI Prolog строка выглядит именно так), то предикат должен иметь примерно такой вид:

    count_symbol_string([], _, 0):-!.
    count_symbol_string([H|T], H, N):- 
      !, count_symbol_string(T, H, NN), N = NN + 1. 
    count_symbol_string([_|T], C, N):-
      count_symbol_string(T, C, N). 

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

    Затем, рассматривается непустой список, первый элемент которого совпадает с переданным символом. В этом случае результат работы предиката получается добавлением единицы к промежуточному результату рекурсивной обработки хвоста списка.

    Во всех остальных случаях (на вход подан непустой список, первый элемент которого не совпадает с переданным во втором аргументе символом) — результат работы предиката будет совпадать с результатом рекурсивной обработки хвоста списка. В связи с тем, что текущий обрабатываемый элемент (Head) не влияет на результат.

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