удаление нескольких символов из текстового файла с помощью C

Я пытаюсь удалить определенные строки из текстового файла. Я должен удалить две строки из файла [Ipsum, печать]. Я попытался сначала удалить только первую строку из файла. Но строка не может быть удалена. Я не могу исправить свой код, где я ошибаюсь.

#include  #include  int main() { int j = 0, i; char getText[1000] = "Lorem Ipsum is simply dummy text of the printing and typesetting industry"; FILE * fptr, * fp2; char a[1000], temp[1000]; char key[50] = "Ipsum", textDelete_2[50] = "printing"; fptr = fopen("D:\\test.txt", "w"); if (fptr == NULL) { printf("File can not be opened. \n"); exit(0); } fputs(getText, fptr); fp2 = fopen("D:\\temp.txt", "w"); if (fp2 == NULL) { printf("File fp2 can not be opened. \n"); exit(0); } printf("\n processing ... \n"); while (fgets(a,1000,fptr)) { for (i = 0; a[i] != '\0'; ++i) { if (a[i] == ' ') { temp[j] = 0; if (strcmp(temp, key) != 0) { fputs(temp, fp2); } j = 0; fputs(" ", fp2); } else { temp[j++] = a[i]; } } if (strcmp(temp, key) != 0) { fputs(temp, fp2); } fputs("\n", fp2); a[0] = 0; } fclose(fptr); fclose(fp2); printf("\n processing completed"); return 0; } 

Прежде всего, ваш входной файл открыт с аргументом w который обозначает write , поэтому он очистит содержимое входного файла, делая вход бесполезным.

Кроме того, ваш код генерирует символы, если до конца строки или до конца 1000 символов, прочитанных, – \ 0 (если вы не указали целую строку или 1000 символов, она будет читать остальную часть содержимого в виде символов).

Окончательный код

 #include  #include  int main() { int j = 0, i; FILE * fptr, * fp2; char a[1024], temp[1024]; char *key = "THIS", *textDelete_2 = "IS"; fptr = fopen("test.txt", "r"); if (fptr == NULL) { printf("File can not be opened. \n"); exit(0); } fp2 = fopen("temp.txt", "w"); if (fp2 == NULL) { printf("File fp2 can not be opened. \n"); exit(0); } printf("\n processing ... \n"); while (fgets(a, sizeof(a), fptr)) { for (i = 0; a[i] != '\0'; ++i) { if (a[i] == 0)break; if (a[i] == ' ') { temp[j] = 0; if (strcmp(temp, key) != 0) { fputs(temp, fp2); } j = 0; fputs(" ", fp2); } else { temp[j++] = a[i]; } } for (i = 0; i < strlen(temp); i++){ if (!isalpha(temp[i]))temp[i] = ' '; } if (strcmp(temp, key) != 0) { fputs(temp, fp2); } fputs("\n", fp2); a[0] = 0; } fclose(fptr); fclose(fp2); printf("\n processing completed"); getchar(); return 0; } 

Входные данные:

 THIS IS SPARTAAAAAAAAAAAAAA 

Выход:

  IS SPARTAAAAAAAAAAAAAA