【问题标题】:deleting multiple characters from text file using C使用C从文本文件中删除多个字符
【发布时间】:2017-04-16 11:12:32
【问题描述】:

我正在尝试从文本文件中删除特定字符串。我必须从文件 [Ipsum, printing] 中删除两个字符串。我首先尝试从文件中只删除第一个字符串。但是字符串不能被删除。我无法更正我的代码,我犯了错误。

#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;
  }

【问题讨论】:

  • strstr()memmove() 是你的朋友。 (但也可以复制到新字符串中)
  • "w" --> "w+"。并执行fflushrewind

标签: c string file


【解决方案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  

【讨论】:

  • 它适用于一个字符串,但我如何从句子中删除多个字符串。就像我必须删除这个和是。我试图修改你的代码,但不能得到正确的结果。请帮忙!!!
  • @nischalinn 将while循环放在一个请求参数“a”的函数中,然后调用它两次。(“a”是被删除的字符串)
猜你喜欢
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2014-04-24
  • 2011-04-01
  • 2010-09-15
  • 1970-01-01
相关资源
最近更新 更多