替换并写入文件c ++

时间:2014-04-05 18:07:04

标签: c++ replace

我希望编写代码来查找文件中的单词并替换单词。 我打开文件,接下来我找到了字。我有替换单词的问题。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
   string contain_of_file,a="car";
 string::size_type position;
   ifstream NewFile; 

 NewFile.open("plik1.txt");
while(NewFile.good())
    {
    getline(NewFile, contain_of_file);

    position=contain_of_file.find("Zuzia");  
        if(position!=string::npos)
        {
        NewFile<<contain_of_file.replace(position,5, a );

        }
    }
 NewFile.close();

 cin.get();
 return 0;
  }

如何改进我的代码?

2 个答案:

答案 0 :(得分:0)

  1. 失去using namespace std;

  2. 不要在需要之前声明变量;

  3. 我认为您所寻找的英语单词是内容 - 但我不是以英语为母语的人;

  4. getline已在布尔上下文中返回NewFile.good();

  5. 无需明确关闭NewFile;

  6. 我会更改NewFile变量

  7. 上的大小写
  8. 我认为你不能写ifstream,你应该管理如何替换文件的内容......

  9. 我的版本就像:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdio>
    
    int main() {
      std::rename("plik1.txt", "plik1.txt~");
    
      std::ifstream old_file("plik1.txt~");
      std::ofstream new_file("plik1.txt");
    
      for( std::string contents_of_file; std::getline(old_file, contents_of_file); ) {
        std::string::size_type position = contents_of_file.find("Zuzia");
        if( position != std::string::npos )
          contents_of_file = contents_of_file.replace(position, 5, "car");
        new_file << contents_of_file << '\n';
      }
    
      return 0;
    }
    

答案 1 :(得分:0)

您的代码至少有两个问题:
1.覆盖文件中的文本 2.写入ifstream i 用于输入,不输出)。

文件对象
想象一个文件包含许多包含字符的小盒子。盒子从前到后以无限的方式粘合在一起。

你可以从盒子里取出信件并放入其他盒子里,但由于它们是胶合的,你不能在现有盒子之间放置新盒子。

替换文字
只要替换文本与原始文本的长度相同,您就可以替换文件中的文本。如果文本太长,则覆盖现有文本。如果替换文本较短,则文件中包含残留文本。两种方法都不好。

要替换(覆盖)文字,请将文件打开为fstream并使用ios::inios::out模式。

输入与输出
替换文本的常用技术是打开* i * nput的原始文件,将新文件打开为* o * utput。

将现有数据(最多为目标文本)复制到新文件。

将替换文本复制到新文件

将任何剩余文本复制到新文件中。

关闭所有文件。