Считать подстроку и текст с клавиатуры, и вывести номера строк, в которых встретилась данная подстрока - 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;
}

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

  1. Подключение необходимых библиотек для работы с клавиатурой и строками.
  2. Объявление переменных:
    • pstr[50] - строка для хранения введенной подстроки;
    • i, j - счетчики для работы с текстом и подстрокой;
    • n - переменная для хранения количества строк в тексте.
  3. Ввод подстроки и количества строк с клавиатуры.
  4. Выделение памяти под массив строк с помощью calloc.
  5. Ввод строк с клавиатуры и сохранение их в выделенном массиве.
  6. Проверка наличия подстроки в каждой строке с помощью функции strstr.
  7. Если подстрока найдена, выводим номер строки, иначе увеличиваем счетчик j.
  8. Если после проверки всех строк подстрока не найдена, выводим сообщение об отсутствии подстроки в тексте.
  9. Освобождение памяти, выделенной под массив строк.
  10. Возврат значения 0, означающего успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы