Найти число вхождений одной строки в другую - 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, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д