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的情况下,则非常棘手。

09-30 14:56
查看更多