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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
void  NaiveStringMatcher( const char *sub,const char *text)
{
     size_t subLen = strlen(sub);
     size_t textLen = strlen(text);
     size_t i, j, counter = 0;
 
     printf("Substring:\n");
     for ( i = 0; i <= textLen - subLen; i++)
     {
 
         for (j = 0; j < subLen; j++)
             if (text[i+j] != sub[j])
                 break;
 
         if (j == subLen)
         {
            printf("was found at position %zu\n",i);
            counter++;
         }
 
   }
   printf("occurs %zu times\n",counter);
}
int main()
{
   NaiveStringMatcher("abba", "abbabba");
   return 0;
}

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

В данном коде реализована функция 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
Похожие ответы