簡體   English   中英

替換並寫入文件c ++

[英]replace and write to file c++

我想編寫代碼以在文件中查找單詞並替換單詞。 我打開文件,然后找到單詞。 我有替換字的問題。

#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;
  }

如何改善我的代碼?

  1. 丟失using namespace std ;

  2. 不要在需要之前聲明變量;

  3. 我認為您要尋找的英語單詞很滿足 -但是我不是英語母語者;

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

  5. 無需顯式關閉NewFile

  6. 我將更改NewFile變量的NewFile

  7. 我不認為您可以寫入ifstream ,而應該管理如何替換文件的內容...

我的版本是這樣的:

#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.覆蓋文件中的文本。
2.寫入ifstreami用於輸入 ,而不用於輸出)。

File對象
想象一個文件中包含字符的許多小盒子。 盒子從前到后以無盡的線條粘在一起。

您可以將字母從盒子中取出並放入其他盒子中,但是由於它們是粘合的,因此不能在現有盒子之間放置新盒子。

取代文字
您可以替換文件中的文本,只要替換文本的長度與原始文本的長度相同即可。 如果文本太長,則覆蓋現有文本。 如果替換文本較短,則文件中將有剩余文本。 兩種方法都不好。

要替換(覆蓋)文本,請以fstream格式打開文件,並使用ios::inios::out模式。

輸入與輸出
替換文本的常用技術是打開* i * nput的原始文件,並打開* o * utput的新文件。

將現有數據(直到目標文本)復制到新文件。

將替換文本復制到新文件

將所有剩余的文本復制到新文件。

關閉所有文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM