Считать подстроку и текст с клавиатуры, и вывести номера строк, в которых встретилась данная подстрока - 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, означающего успешный конец работы программы.