gpt4 book ai didi

c - 替换文件中的字符

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:33 24 4
gpt4 key购买 nike

我需要用我的 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);
}

但出于某种原因,它替换了我文件中的所有字符。但我需要替换除“d”之外的所有内容

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

谢谢大家。

最佳答案

我看到的几个错误:

对于初学者,您的“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'};

您可以用字符串声明轻松替换上面的数组。而且您不需要显式空字符,因为它是字符串文字的隐式部分。

char* chars= "abcdefghijklmnopqrstuvwxyz";

另外,这个声明:

fseek(file, 0, SEEK_CUR);

是一个空操作,什么都不做。我认为您想将文件指针向后设置一个字符。因此,这就是您想要的:

fseek(file, -1, SEEK_CUR);

fflush 调用不是必需的,只会影响性能。可能对调试有用,但您可能不需要它。

关于c - 替换文件中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30691864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com