Считать подстроку и текст с клавиатуры, и вывести номера строк, в которых встретилась данная подстрока - C (СИ)
Формулировка задачи:
Доброго времени суток, очень нужна ваша помощь!
Есть задача: Написать программу на языке С, которая считывает подстроку и текст с клавиатуры, и выводит номера строк, в которых встретилась данная подстрока или сообщение о том, что она в данном тексте отсутствует.
Вот мои наработки:
===
Примечание: преподаватель сказал делать через динамическое выделение памяти
===
Возникшие проблемы:
При компиляции выдаёт вот это:
+ При работе программы выдаёт "ошибку сегментирования" доходя до строчки с динамическим выделением памяти.
#include<stdio.h> #include<ctype.h> #include<string.h> #include<stdlib.h> int main(){ char pstr[50]; int i=0,j=0,n; puts("Введите подстроку: "); fgets(pstr,50,stdin); while(pstr[i]!='\n') i++; pstr[i]='\0'; printf("Введите кол-во строк в тексте: "); scanf("%d",&n); printf("\n"); n*=50; char* str=(char*)calloc(n,sizeof(char)); for(i=0; i<n; i++){ printf("Введите строку номер %d: ",i+1); fgets(*(*(str+i)+j),50,stdin); } for(i=0; i<n; i++){ if(strstr(*(*(str+i)+j),pstr)!=NULL) printf("Подстрока присутствует в строке номер %d.\n", i+1); j++; } if(j!=0) printf("Подстрока отсутствует в данном тексте!\n"); return 0; }
Решение задачи: «Считать подстроку и текст с клавиатуры, и вывести номера строк, в которых встретилась данная подстрока»
textual
Листинг программы
#include<stdio.h> #include<ctype.h> #include<string.h> #include<stdlib.h> int main(){ char pstr[50]; int i=0,j=0,n; puts("Введите подстроку: "); scanf("%s", pstr); printf("Введите кол-во строк в тексте: "); scanf("%d",&n); char* str=(char*)calloc(n*50,sizeof(char)); for(i=0; i<n; i++){ printf("Введите строку номер %d: ",i+1); scanf("%s", str+50*i); } for(i=0; i<n; i++){ if(strstr(str+50*i,pstr)!=NULL) printf("Подстрока присутствует в строке номер %d.\n", i+1); j++; } if(j!=0) printf("Подстрока отсутствует в данном тексте!\n"); free(str); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с клавиатурой и строками.
- Объявление переменных:
- pstr[50] - строка для хранения введенной подстроки;
- i, j - счетчики для работы с текстом и подстрокой;
- n - переменная для хранения количества строк в тексте.
- Ввод подстроки и количества строк с клавиатуры.
- Выделение памяти под массив строк с помощью calloc.
- Ввод строк с клавиатуры и сохранение их в выделенном массиве.
- Проверка наличия подстроки в каждой строке с помощью функции strstr.
- Если подстрока найдена, выводим номер строки, иначе увеличиваем счетчик j.
- Если после проверки всех строк подстрока не найдена, выводим сообщение об отсутствии подстроки в тексте.
- Освобождение памяти, выделенной под массив строк.
- Возврат значения 0, означающего успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д