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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.   int l1,l2,c;
  7.   scanf("%d %d\n",&l1,&l2);
  8.   char s1[l1],s2[l2],*t,*st;
  9.   gets(s1);
  10.   gets(s2);
  11.   st=s1;
  12.   c=0;
  13.   while (1) {
  14.     t=strstr(st,s2);
  15.     if (!t) break;
  16.     c++;
  17.     st=t+1;
  18.     if (st[0] == '\0') break;
  19.   }
  20.   printf("%d",c);
  21.   return 0;
  22. }

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

В этом коде:

  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

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

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

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