Удаление слова из строки: неправильный указатель - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу, которая: - выводит текст на экран дисплея; - выводит текст на экран дисплея еще раз, удаляя из него заданное слово (заданное слово вводится с клавиатуры).
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>

int main ()
{
    setlocale (LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
        
    FILE *text_file;
    int i=0, j=0, x=0;
    char *p;
    const int SIZE = 15, MAX_SIZE = 70;
    char **string = new char *[SIZE]; 
    char word [MAX_SIZE];
              
    for(i=0; i<SIZE; i++) 
        string[i] = new char[MAX_SIZE];
    for (i=0; i<SIZE; i++) 
        for (j=0; j<MAX_SIZE; j++) 
            string[i][j]='\0';
 
    if((text_file=fopen("file.txt","r")) == NULL )
        { 
            printf ("\nFile does not exist.\n");
            getch();
            exit(1);
        }
 
    while ((!feof(text_file)) && (x<SIZE)) 
            {
                fgets (string[x], MAX_SIZE, text_file);
                printf ("%s", string[x]);
                x++;
            }
 
      /* выводит текст на экран дисплея еще раз, удаляя из него заданное слово 
      (заданное слово вводится с клавиатуры). */
 
    fflush(stdin);
    printf ("\n\nВведите слово: ");
    scanf ("%s", word);
    
            for (i=0; i<x; i++)
            {   
                if (strstr(string[i],word)!=0) 
//если введенное слово есть в строке, то далее эта строка разбивается на отдельные слова, 
//которые по-одному сравниваются с введенным словом
                {
                    p = strtok (string[i], " ");
                    while (p!=NULL)
                    {
                        p = strtok (NULL, " ");
                        if (strstr(p, word)!=0) printf ("%s",' ');
                        else printf ("%s ",p);
                    }
 
                }
 
                else printf ("%s",string[i]);
            }
 
    for(i=0; i<SIZE; i++)delete[] string[i];
    delete[] string;
 
    system("pause");
    fclose(text_file);
    return 0;
}
В этом коде, насколько я поняла, есть проблема с указателем *p и функцией strstr(), и при запуске постоянно вылетают ошибки в output.c и strstr.asm вида:
Необработанное исключение в "0x61f4984f (msvcr90d.dll)" в "14.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000020".
Подскажите, пожалуйста, что не так.

Решение задачи: «Удаление слова из строки: неправильный указатель»

textual
Листинг программы
while (p!=NULL)
{
    if (strstr(p, word)!=0){
        printf ("%c",' ');
    }
    else printf ("%s ",p);
    p = strtok (NULL, " ");
}

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

В данном коде происходит удаление слова из строки. Вот список действий:

  1. Входные данные:
    • Строка: p (предположительно содержит несколько слов, разделенных пробелами)
    • Слово: word (предположительно содержит одно слово, которое необходимо удалить)
  2. Создается цикл while, который выполняется до тех пор, пока p не станет равным NULL. Это означает, что мы проходим по каждому слову в строке.
  3. Внутри цикла проверяется, содержит ли текущее слово из строки p искомое слово word. Для этого используется функция strstr, которая возвращает указатель на первое вхождение подстроки в строку. Если подстрока найдена (strstr не возвращает NULL), то выполняется следующее действие:
    • Выводится символ пробела: printf (%c,' ');
  4. Если подстрока не найдена, то выводится текущее слово из строки p: printf (%s,p);
  5. После вывода текущего слова, функция strtok вызывается с аргументами NULL и , чтобы получить следующее слово в строке. Значение NULL указывает на то, что мы достигли конца строки, и следующий вызов strtok вернет NULL.
  6. Цикл while продолжается, пока не будет достигнуто условие выхода из цикла (p не станет равным NULL). Таким образом, данный код проходит по каждому слову в строке и выводит все слова, кроме указанного для удаления.

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


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

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

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