C - 如何从c中的文件中删除与用户输入相同的字符串?

时间:2014-04-25 15:20:34

标签: c

我想创建一个删除与文件中用户输入相同的String的程序 以下是文件中的内容

G12
G13
G14

例如用户输入G13,预期输出如下:

G12
G14

我知道制作一个临时文件,但不知道如何逐行获取字符串,因为我使用这些代码打印文件内容

if(file!=NULL)
{
    while ((c = getc(file)) != EOF)
    putchar(c);
    fclose(file);
}

所以基本上我只是逐个字母地阅读所有文件内容(不知道如何让它逐字逐句地阅读

提前致谢

2 个答案:

答案 0 :(得分:1)

简单的逐行样本

#include <stdio.h>
#include <string.h>

char *esc_cnv(char *str){
    char *in, *out;
    out = in = str;
    while(*in){
        if(*in == '\\' && in[1] == 'n'){
            *out++ = '\n';
            in += 2;
        } else 
            *out++ = *in++;
    }
    *out = '\0';
    return str;
}

int main(void){
    FILE *fin = stdin, *fout = stdout;
    char line[1024];
    char del_str[1024];
    char *p, *s;
    int len;
    int find=0;//this flag indicating whether or not there is a string that you specify 

    fin = fopen("input.txt", "r");
    fout = fopen("output.txt", "w");//temp file ->(delete input file) -> rename temp file.
    printf("input delete string :");
    scanf("%1023[^\n]", del_str);
    esc_cnv(del_str);//"\\n" -> "\n"
    len = strlen(del_str);
    while(fgets(line, sizeof(line), fin)){
        s = line;
        while(p = strstr(s, del_str)){
            find = 1;//find it!
            *p = '\0';
            fprintf(fout, "%s", s);
            s += len;
        }
        fprintf(fout, "%s", s);
    }
    fclose(fout);
    fclose(fin);
    if(find==0)
        fprintf(stderr, "%s is not in the file\n", del_str); 
    return 0;
}

答案 1 :(得分:0)

正如迈克尔所说的那样。在文件上,您只能执行写入和读取操作。所以你必须阅读char,当你找到你不想写的确切词时,就不要写它。否则你写它:)