gpt4 book ai didi

c++ - 如何使用 C++ 快速替换字符

转载 作者:太空狗 更新时间:2023-10-29 23:43:36 25 4
gpt4 key购买 nike

我有一个文本文件 (66GB),我想在其中替换一些字符。我无法将整个内容加载到内存中。

这是我希望做的事情的基本想法:

std::ifstream i(infile.c_str()); // ifsteam 
while(i.good()) {
getline(i, line);
for(int c=0;c<line.length();c++) {
if(line[c]=='Q')
// *** REPLACE Q WITH X HERE
}
}

我的问题是:我该如何放置新角色才能真正取代 Q?

子问题:是否有更好/更快的方法来做到这一点?


我在虚拟 ubuntu 服务器上工作:2 个内核,4GB 内存,操作系统是 ubuntu。

最佳答案

你可以使用这样的东西,我认为它会更快。

std::ifstream ifs("input_file_name", std::ios::binary);
std::ofstream ofs("output_file_name", std::ios::binary);

char buf[4096]; // larger = faster (within limits)

while(ifs.read(buf, sizeof(buf)) || ifs.gcount())
{
// replace the characters
std::replace(buf, buf + ifs.gcount(), 'Q', 'X');

// write to a new file
ofs.write(buf, ifs.gcount());
}

如果您不想生成单独的文件(更危险),那么您可以像这样修改原始文件(未经测试的代码):

std::fstream fs("input_file_name", std::ios::in|std::ios::out|std::ios::binary);

char buf[4096]; // larger = faster (within limits)

auto beg = fs.tellg();

while(fs.read(buf, sizeof(buf)) || fs.gcount())
{
auto end = fs.tellg();

// replace the characters
std::replace(buf, buf + fs.gcount(), 'Q', 'X');

// return to start of block
fs.seekp(beg);

// overwrite this block
fs.write(buf, fs.gcount());

// shift old beginning to the end
beg = end;

// go to new beginning to start reading the next block
fs.seekg(beg);
}

关于c++ - 如何使用 C++ 快速替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617535/

25 4 0
文章推荐: c++ - Mac 上 C++ 中 for 循环的奇怪行为
文章推荐: c# - 将 CookComputing XMLRpcStruct (IEnumerable) 转换为实际的 C# 类