前几天我问过这个问题:
如何在二进制文件中查找 ANSI 字符串?
我得到了一个非常好的answer,后来变成了一个更难的问题:输入迭代器可以用在需要前向迭代器的地方吗?现在确实不是我能理解的水平。
我仍在学习 C++,并且正在寻找一种在二进制文件中搜索字符串的简单方法。
有人可以给我看一个简约的 C++ 控制台程序的简单代码吗它在二进制文件中查找字符串并将位置输出到标准输出?
可能,你能告诉我吗
一个版本,其中文件正在被复制到内存中(假设二进制文件很小)
另一个使用的是合适的方式从链接的问题
抱歉,如果这听起来像是我在索要某人的代码,但我刚刚学习 C++,我认为如果有人可以发布一些值得学习的高质量代码,也许其他人可以从这个问题中受益。
您的需求规范不清楚,例如 - “121”出现在“12121”中的哪里......只是在第一个字符(之后搜索在第四个字符处继续),还是在第三个字符处?下面的代码使用前一种方法。
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
int main(int argc, const char* argv[])
{
if (argc != 3)
{
std::cerr << "Usage: " << argv[0] << " filename search_term\n"
"Prints offsets where search_term is found in file.\n";
return 1;
}
const char* filename = argv[1];
const char* search_term = argv[2];
size_t search_term_size = strlen(search_term);
std::ifstream file(filename, std::ios::binary);
if (file)
{
file.seekg(0, std::ios::end);
size_t file_size = file.tellg();
file.seekg(0, std::ios::beg);
std::string file_content;
file_content.reserve(file_size);
char buffer[16384];
std::streamsize chars_read;
while (file.read(buffer, sizeof buffer), chars_read = file.gcount())
file_content.append(buffer, chars_read);
if (file.eof())
{
for (std::string::size_type offset = 0, found_at;
file_size > offset &&
(found_at = file_content.find(search_term, offset)) !=
std::string::npos;
offset = found_at + search_term_size)
std::cout << found_at << std::endl;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)