2017-04-16 97 views
-1

我想从文本文件中删除特定的字符串。我必须从文件[Ipsum,打印]中删除两个字符串。我试着先删除文件中的第一个字符串。但是字符串不能被删除。我无法纠正我的代码,我犯了错误。所有的从文本文件中删除多个字符使用C

#include <stdio.h> 
#include <stdlib.h> 
    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; 
    } 
+1

'的strstr()'和'的memmove()'是你的朋友。 (但是复制到一个新的字符串也会起作用) – wildplasser

+0

'“w”' - >'“w +”'。并做'fflush'和'rewind'。 – BLUEPIXY

回答

1

首先,输入文件是与代表write的说法w开放的,所以它会清除输入的文件使输入无用的内容。

此外,如果在行尾之前或1000字符结束之前是\ 0(如果您没有写入整行或1000个字符,它会将其余内容作为符号读取),您的代码将生成符号。

最终代码

#include <stdio.h> 
#include <stdlib.h> 
    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 
+0

它为一个字符串工作,但我怎样才能从句子中删除多个字符串。就像我要删除这个和IS。我试图修改你的代码,但不能得到正确的结果。请帮忙!!! – nischalinn

+0

@nischalinn将while循环放入一个函数,请求参数“a”,然后调用它两次(“a”是被删除的字符串) –