我有一个文本文件,它是文件分配表的修剪hexdump,由许多行组成,看起来有点像:
5e7f4c962f80d36dd2eb8fc9f20780e9
36e9f5c7645900000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
...
在这个文件中,我想搜索特定的字符子串。但是,这有一些障碍。通常,我只使用ifstream和getline(),然后将line.find()应用于每一行,直到找到/找不到子字符串。但是,使用此文件,目标子字符串可能会跨多行分割。该文件也可能长达数千行,因此首先从文本文件中修剪\ n字符是不切实际的(如果我尝试的话,它实际上会使文本编辑器陷入困境并导致奇怪的结果)。什么是完成搜索的有效方法?
编辑:我也应该指出我实际上想要返回匹配字符串的位置,所以不可能,例如,一次连接两条线,只删除该连接的\ n字符,搜索和迭代通过,如果没有找到。如果匹配在非空白字符15000上开始,我想返回15000。
答案 0 :(得分:0)
您可以一次搜索char
个文件,并将其与搜索相匹配。
std::size_t findStringInFile(std::ifstream& file, std::string& string) {
auto it = string.begin();
char c;
while (file >> c) {
if (c == '\n')
continue;
if (c == *it)
++it;
else
it = string.begin();
if (it == string.end())
return file.tellg() - string.size();
}
return std::size_t(-1);
}