[英]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;
}
如何改善我的代碼?
丟失using namespace std
;
不要在需要之前聲明變量;
我認為您要尋找的英語單詞很滿足 -但是我不是英語母語者;
getline
已經在布爾上下文中返回NewFile.good()
;
無需顯式關閉NewFile
;
我將更改NewFile
變量的NewFile
;
我不認為您可以寫入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.寫入ifstream
( i用於輸入 ,而不用於輸出)。
File對象
想象一個文件中包含字符的許多小盒子。 盒子從前到后以無盡的線條粘在一起。
您可以將字母從盒子中取出並放入其他盒子中,但是由於它們是粘合的,因此不能在現有盒子之間放置新盒子。
取代文字
您可以替換文件中的文本,只要替換文本的長度與原始文本的長度相同即可。 如果文本太長,則覆蓋現有文本。 如果替換文本較短,則文件中將有剩余文本。 兩種方法都不好。
要替換(覆蓋)文本,請以fstream
格式打開文件,並使用ios::in
和ios::out
模式。
輸入與輸出
替換文本的常用技術是打開* i * nput的原始文件,並打開* o * utput的新文件。
將現有數據(直到目標文本)復制到新文件。
將替換文本復制到新文件 。
將所有剩余的文本復制到新文件。
關閉所有文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.