Найти число вхождений одной строки в другую - C (СИ)

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

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

Код под спойлером по собственным соображениям.
#include <stdio.h>
#include <string.h>
 
int main()
{
    int l1,l2,c;
    char s1[100000],s2[1000],*t,*st;
    scanf("%d %d\n",&l1,&l2); //длины строк, хз зачем
    gets(s1); //сами строки
    gets(s2);
    st=s1;
    c=0;
    while (1) {
        t=strstr(st,s2);
        if (t==NULL) break;
        c++;
        st=t+1;.
    }
    printf("%d",c);
    return 0;
}
Эта программа находит число вхождений s2 в s1 (маленькие латинские символы). Одна проблема - она работает не на всех тестах (которые я, естественно, не знаю). И я В УПОР не понимаю, почему. Подразумевается что все "тесты" хорошие (соответствуют условию, которое вкратце описал). Все тесты из головы программа успешно проходит. Прошу помощи, хотя бы намекните в чём проблема.

Решение задачи: «Найти число вхождений одной строки в другую»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int main()
{
  int l1,l2,c;
  scanf("%d %d\n",&l1,&l2);
  char s1[l1],s2[l2],*t,*st;
  gets(s1);
  gets(s2);
  st=s1;
  c=0;
  while (1) {
    t=strstr(st,s2);
    if (!t) break;
    c++;
    st=t+1;
    if (st[0] == '\0') break;
  }
  printf("%d",c);
  return 0;
}

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

В этом коде:

  1. Вводятся две строки s1 и s2, для этого используются переменные s1 и s2 типа char, которые динамически выделяются память с помощью массивов.
  2. Задаются начальные значения для строк s1 и s2, для этого используются функции gets().
  3. Находится первое вхождение подстроки s2 в строку s1, для этого используется функция strstr().
  4. Если подстрока не найдена, то выводится сообщение об ошибке и программа завершается.
  5. Пока подстрока s2 встречается в строке s1, увеличивается счетчик c.
  6. Адреса памяти для строк s1 и s2 обновляются, чтобы продолжить поиск следующего вхождения подстроки s2 в строку s1.
  7. Если подстрока s2 не найдена, то программа завершается.
  8. Выводится значение счетчика c.
  9. Программа возвращает 0, что означает успешное завершение.

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


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

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

14   голосов , оценка 4.143 из 5
Похожие ответы