C++ C++;搜索文本文件中跨多行拆分的字符串

C++ C++;搜索文本文件中跨多行拆分的字符串,c++,string,file,search,input,C++,String,File,Search,Input,我有一个文本文件,它是文件分配表的一个转储文件,由许多行组成,看起来有点像: 5e7f4c962f80d36dd2eb8fc9f20780e9 36e9f5c7645900000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 ... 在这个文件中,我想搜索字符的特定子字符串。然而,这方面存在一些障碍。通常,我只需要使用ifstream和getline(),然后对每一行应用line

我有一个文本文件,它是文件分配表的一个转储文件,由许多行组成,看起来有点像:

5e7f4c962f80d36dd2eb8fc9f20780e9
36e9f5c7645900000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
...
在这个文件中,我想搜索字符的特定子字符串。然而,这方面存在一些障碍。通常,我只需要使用ifstream和getline(),然后对每一行应用line.find(),直到找到/未能找到子字符串为止。但是,使用此文件时,目标子字符串可能会被拆分为多行。该文件还可能有成千上万行长,因此无法首先从文本文件中修剪字符(如果我尝试,它实际上会使文本编辑器陷入困境,并导致奇怪的结果)。完成搜索的有效方法是什么


编辑:我还应该指出,我实际上希望返回匹配字符串的位置,因此不可能一次将两行连接在一起,只删除连接的\n字符,搜索,如果找不到,则进行迭代。如果匹配从非空白字符15000开始,我想返回15000。

您可以一次搜索一个
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);
}
在Linux上,我会
mmap()。