void replaceString(char* file, char* str, char* replace)
{
FILE* fp = fopen(file,"rt");
char buffer[BUFFER];
while(fgets(buffer,BUFFER,fp)!=NULL)
{
char* s;
s=strstr(buffer,str);
if(s!=NULL)
{
strcpy(s,replace);
printf("%s is replaced by %s\n",str,replace);
}
}
fclose(fp);
}
int main(int argc, char **argv)
{
char* file= "text.txt";
replaceString(file,"is","was");
printFile(file);
return 0;
}
伙计们,我是新来的文件操作,试图找到并替换另一个字符串。请帮忙!我试图以“rt”模式打开文件。在一些示例代码中看到了这一点。不确定模式。我想我需要使用一个temp.txt文件来完成这项工作!不使用任何其他文件就可以在一个文件中完成吗??
最佳答案
下面是你的算法中的一些错误。
您一次读取并查看一个字符缓冲区,没有重叠。如果缓冲区之间出现str
怎么办?(即str
的第一部分在缓冲区的末尾,第二部分在下一个缓冲区的开头)。
使用str
直接在缓冲区中用replace
覆盖strcpy
。如果两个字符串的长度不同呢?如果replace
短于str
,则仍有str
结尾,如果replace
长,则将覆盖str
后面的文本
即使它们的长度相同,strcpy
也会在副本末尾添加最后的0个字符(这就是它们如何告诉您字符串的结尾)。你肯定不想那样。也许strncpy
在这里是一个更好的建议,尽管如果两个字符串的长度不同,它仍然不起作用。
替换缓冲区中的字符串,但对“已更正”的缓冲区不做任何操作!缓冲区不是文件,文件的内容被复制到缓冲区中。所以你把复印件改了,然后什么也没改。文件不会更改。您需要将更改写入一个文件,最好是另一个文件。
编写这样的替换并不像您想象的那么简单。我可能会尽力帮助你,但如果你只是想学习如何处理文件,而对使用字符串仍然不太满意,那就有点过头了。
如果您有足够的内存一次读取整个文件(如果BUFFER
大于文件大小),那么在单个文件中执行替换是很容易的,但如果不是,尤其是在replace
大于str
的情况下,则非常棘手。