替换文件中的字符

时间:2015-06-07 09:14:52

标签: c

我需要在 file.txt 中将每个字母字符替换为特定字符。 我写了以下代码片段:

FILE *file;
char c;
file = fopen(filename, "r+");

char chars[] = { 'a', 'b', 'c', 'd', 'e', 
                 'f', 'g', 'k', 'l', 'm',
                 'n', 'o', 'p', 'r', 's', 
                 't', 'u', 'v', 'w', 'x', 
                 'y', 'z'};
    while ((c = getc(file)) != EOF) {
        if (c == 'd') {
            continue;
        }
        if (strchr(chars, c) != NULL) {
            fseek(file, 0, SEEK_CUR);
            fputc((int)specific_char, file);
            fflush(file);
        }
    }
    fclose(file);
}

但由于某种原因,它会替换我文件中的所有字符。但我需要更换除了' 之外的所有内容。

我的代码有什么问题? (代码应该用C语言编写,而不是用C ++编写)

感谢大家。

1 个答案:

答案 0 :(得分:2)

我看到几个错误:

对于初学者来说,你的" chars"数组使得strchr调用按预期工作:

char chars[] = { 'a', 'b', 'c', 'd', 'e', 
                 'f', 'g', 'k', 'l', 'm',
                 'n', 'o', 'p', 'r', 's', 
                 't', 'u', 'v', 'w', 'x', 
                 'y', 'z', '\0'};

您可以使用字符串声明轻松替换上面的数组。并且您不需要显式的null char,因为它隐含地是字符串文字的一部分。

char* chars= "abcdefghijklmnopqrstuvwxyz";

另外,这句话:

fseek(file, 0, SEEK_CUR);

是一个禁止操作,并没有做任何事情。我想你想要将文件指针向后设置一个char。因此,这就是你想要的:

fseek(file, -1, SEEK_CUR);

不需要fflush来电,只会影响效果。可能对调试很有用,但您可能不需要它。