Найти число вхождений одной строки в другую - C (СИ)
Формулировка задачи:
Код под спойлером по собственным соображениям.
Эта программа находит число вхождений s2 в s1 (маленькие латинские символы). Одна проблема - она работает не на всех тестах (которые я, естественно, не знаю). И я В УПОР не понимаю, почему. Подразумевается что все "тесты" хорошие (соответствуют условию, которое вкратце описал). Все тесты из головы программа успешно проходит. Прошу помощи, хотя бы намекните в чём проблема.
Листинг программы
- #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;
- }
Решение задачи: «Найти число вхождений одной строки в другую»
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;
- }
Объяснение кода листинга программы
В этом коде:
- Вводятся две строки s1 и s2, для этого используются переменные s1 и s2 типа char, которые динамически выделяются память с помощью массивов.
- Задаются начальные значения для строк s1 и s2, для этого используются функции gets().
- Находится первое вхождение подстроки s2 в строку s1, для этого используется функция strstr().
- Если подстрока не найдена, то выводится сообщение об ошибке и программа завершается.
- Пока подстрока s2 встречается в строке s1, увеличивается счетчик c.
- Адреса памяти для строк s1 и s2 обновляются, чтобы продолжить поиск следующего вхождения подстроки s2 в строку s1.
- Если подстрока s2 не найдена, то программа завершается.
- Выводится значение счетчика c.
- Программа возвращает 0, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д