Дана символьная строка.Подсчитать сколько раз в ней встречается подслово абба - 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
.
Список действий:
- Вычисление длины подстроки и строки:
- Строка
sub
сохраняется в переменнойsubLen
с помощью функцииstrlen()
. - Строка
text
сохраняется в переменнойtextLen
с помощью функцииstrlen()
.
- Строка
- Поиск вхождений подстроки в строку:
- Переменная
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.
- Переменная
- Вывод результата:
- В конце функции, с помощью функции
printf()
выводится сообщение, указывающее количество вхождений подстроки. Значение переменнойcounter
используется в качестве аргумента для функцииprintf()
с использованием формата%zu
, чтобы указать на то, что будет выводиться целое число, без знака. В функцииmain()
, подстрокаabba
и строкаabbabba
передаются в качестве аргументов функцииNaiveStringMatcher
.
- В конце функции, с помощью функции
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д