Из строки, имеющейся в файле, удалить подстроку, введенную с клавиатуры - C (СИ)

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

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

Надо сделать прогу в которой из строки имеющейся в файле удалялась подстрока введенная с клавиатуры, а результат записывался в новый файл. Вот некоторые наработки
#include <stdio.h>
#include <conio.h>
#include <string.h>
 int main ()
{ 
 
    int j, l, k=0, i;
    int n=20, m=100;
    char z[n];    
    char s[m];
    FILE *t, *nf;
    t = fopen("D:\\text.txt", "r");
    if(t == NULL)//якщо файлу неіснує - помилка
    {
        printf("Ошибка при открытии файла.\n");
        getchar ();
        return 1;
          }
nf = fopen ("test.txt", "w");//створюю новий файл для запису в нього строк
    printf("Введите символы: ");
    for(i=0;i<n;i++){
    scanf("%s", &z[i]);
    k++;}
    for(i=0;i<m-k;i++){
        for(j=0;j<k;j++)
        if(z[j]!=s[i+j])
        l++;
     if(l==k)
     i+=k;
     else
     fprintf(nf, "%s", s[i]);      
}         
    fclose (t);//закриття файлів
    fclose (nf);
    //remove("D:\\text.txt");//видалення попереднього файла
    getchar ();
    return 0;
 
}

Решение задачи: «Из строки, имеющейся в файле, удалить подстроку, введенную с клавиатуры»

textual
Листинг программы
/*из строки имеющейся в файле удалялась подстрока введенная с клавиатуры, 
а результат записывался в новый файл.
*/
 
#include <stdio.h>
#include <string.h>
#define SIZE 256
 
int main()
{   FILE *in, *out;
    char buf[SIZE], temp[SIZE], c;
    int subDetected = 0, len;
    long start;
 
    in = fopen("text.txt", "r");
    out = fopen("test.txt", "w");
    if(in == NULL || out == NULL)
    {   perror  ("Error working with files\n");
        getchar ();
        return 1;
    }
 
    printf  ("Enter your line:\n");
    fgets (buf, SIZE, stdin);
    buf[strlen(buf)-1] = '\0';
    len = strlen(buf);
    puts(buf);
 
    do
    {   start = ftell (in);
        c = getc (in);
        if (c == EOF) break;
        if (c == buf[0])                            //возможно, начало подстроки
        {   fseek (in, start, SEEK_SET);            //во входном потоке возвращаемся на одну позицию назад  
            fgets (temp, len+1, in);                //считываем строку длиной введенной строки buf
            puts(temp);
            if (strcmp (buf, temp) == 0)            //если строки равны
                fseek (in, start + len, SEEK_SET);  //пропускаем во входном потоке эту строку
            else                                    //если совпал символ, но не совпали строки
            {   putc (c, out);                      //записываем символ в выходной поток
                fseek (in, start + 1, SEEK_SET);    //готовимся к считыванию следующего символа
            }
        }
        else
            putc (c, out);  //обычный символ - записываем в выходной поток
    } while (c != EOF);
 
    fclose (in);
    fclose (out);
 
    getchar();
    return 0;
}

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

  1. Удаление подстроки из файла.
  2. Создание нового файла для записи результата.
  3. Чтение строки из файла и ввод с клавиатуры.
  4. Если введенная строка пустая, то выходим из программы.
  5. Инициализация переменных: файлов, строк, количества найденных подстрок.
  6. Поиск подстроки в файле, начиная с начала.
  7. Если подстрока найдена, то переходим к следующему символу в файле.
  8. Если подстрока не найдена, то записываем текущий символ в новый файл.
  9. Закрытие файлов.
  10. Получение символа подтверждения и выход из программы.
  11. Ввод с клавиатуры пустой строки.
  12. Чтение файла до конца.
  13. Переход к следующему символу в файле.
  14. Если текущий символ равен EOF, то выходим из цикла.
  15. Если текущий символ равен началу подстроки, то переходим к следующей итерации цикла.
  16. Если текущий символ не равен началу подстроки, то записываем его в новый файл.
  17. Если текущий символ равен началу подстроки и текущий символ не равен последнему символу подстроки, то переходим к следующей итерации цикла.
  18. Если текущий символ равен началу подстроки и текущий символ равен последнему символу подстроки, то пропускаем этот символ в файле.
  19. Если текущий символ не равен началу подстроки, то записываем его в новый файл.
  20. Закрытие файлов и выход из программы.

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


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

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

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