Дана символьная строка.Подсчитать сколько раз в ней встречается подслово абба - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана символьная строка.Подсчитать сколько раз в ней встречается подслово абба. В строке аббабба это слово встречается 1 раз а должно быть 2(так препод поросил)как это реализовать?. Очень прошу всех помочь.

Решение задачи: «Дана символьная строка.Подсчитать сколько раз в ней встречается подслово абба»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void  NaiveStringMatcher( const char *sub,const char *text)
  5. {
  6.      size_t subLen = strlen(sub);
  7.      size_t textLen = strlen(text);
  8.      size_t i, j, counter = 0;
  9.  
  10.      printf("Substring:\n");
  11.      for ( i = 0; i <= textLen - subLen; i++)
  12.      {
  13.  
  14.          for (j = 0; j < subLen; j++)
  15.              if (text[i+j] != sub[j])
  16.                  break;
  17.  
  18.          if (j == subLen)
  19.          {
  20.             printf("was found at position %zu\n",i);
  21.             counter++;
  22.          }
  23.  
  24.    }
  25.    printf("occurs %zu times\n",counter);
  26. }
  27. int main()
  28. {
  29.    NaiveStringMatcher("abba", "abbabba");
  30.    return 0;
  31. }

Объяснение кода листинга программы

В данном коде реализована функция NaiveStringMatcher, которая подсчитывает количество вхождений подстроки sub в строку text. Список действий:

  1. Вычисление длины подстроки и строки:
    • Строка sub сохраняется в переменной subLen с помощью функции strlen().
    • Строка text сохраняется в переменной textLen с помощью функции strlen().
  2. Поиск вхождений подстроки в строку:
    • Переменная i инициализируется значением 0, а переменная j - значением 0. Переменная counter инициализируется значением 0 и будет использоваться для подсчета количества вхождений подстроки.
    • Строка выводится с помощью функции printf() с использованием формата %s, чтобы указать на то, что будет выводиться строка.
    • Используется два вложенных цикла. Внешний цикл выполняется до тех пор, пока индекс i меньше или равен textLen - subLen. Это условие гарантирует, что мы не выйдем за пределы строки text, когда будем сравнивать символы.
    • Во внутреннем цикле происходит сравнение каждого символа подстроки sub со символами строки text. Если символы не совпадают, то условие if (text[i+j] != sub[j]) становится истинным и цикл прерывается с помощью оператора break.
    • Если внутренний цикл завершается без прерывания, это означает, что подстрока sub найдена в строке text начиная с позиции i.
    • В этом случае, с помощью функции printf() выводится сообщение, указывающее позицию, на которой найдена подстрока, и значение переменной counter увеличивается на 1.
  3. Вывод результата:
    • В конце функции, с помощью функции printf() выводится сообщение, указывающее количество вхождений подстроки. Значение переменной counter используется в качестве аргумента для функции printf() с использованием формата %zu, чтобы указать на то, что будет выводиться целое число, без знака. В функции main(), подстрока abba и строка abbabba передаются в качестве аргументов функции NaiveStringMatcher.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы