我希望编写代码来查找文件中的单词并替换单词。 我打开文件,接下来我找到了字。我有替换单词的问题。
#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;
}
如何改进我的代码?
答案 0 :(得分:0)
失去using namespace std
;
不要在需要之前声明变量;
我认为您所寻找的英语单词是内容 - 但我不是以英语为母语的人;
getline
已在布尔上下文中返回NewFile.good()
;
无需明确关闭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 :(得分:0)
您的代码至少有两个问题:
1.覆盖文件中的文本
2.写入ifstream
( i 用于输入,不输出)。
文件对象
想象一个文件包含许多包含字符的小盒子。盒子从前到后以无限的方式粘合在一起。
你可以从盒子里取出信件并放入其他盒子里,但由于它们是胶合的,你不能在现有盒子之间放置新盒子。
替换文字
只要替换文本与原始文本的长度相同,您就可以替换文件中的文本。如果文本太长,则覆盖现有文本。如果替换文本较短,则文件中包含残留文本。两种方法都不好。
要替换(覆盖)文字,请将文件打开为fstream
并使用ios::in
和ios::out
模式。
输入与输出
替换文本的常用技术是打开* i * nput的原始文件,将新文件打开为* o * utput。
将现有数据(最多为目标文本)复制到新文件。
将替换文本复制到新文件。
将任何剩余文本复制到新文件中。
关闭所有文件。