C 搜索文本文件中多行分开的字符串

C++ Search For A String Split Across Multiple Lines In a Text File

本文关键字:字符串 搜索 文本 文件      更新时间:2023-10-16

我有一个文本文件,该文件是文件分配表的修剪六角形,其中包括许多看起来像:

的行组成
5e7f4c962f80d36dd2eb8fc9f20780e9
36e9f5c7645900000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
...

在此文件中,我想搜索特定的字符子字符串。但是,这有一些障碍。通常,我只使用ifstream和getline((,然后将line.find((应用于每行,直到找到/找不到找到子字符串为止。但是,使用此文件,目标基因带可能会跨多行分开。该文件在数千行中的长度也可能是数千个,因此首先要从文本文件中修剪字符不切实际(实际上,它实际上陷入了文本编辑器,如果我尝试的话会带来奇怪的结果(。完成我的搜索的有效方法是什么?

编辑:我还应该指出,我实际上想返回匹配的字符串的位置,因此不可能一次将2行串联在一起,仅删除该串联的 n n字符,搜索和如果找不到的话,请迭代。如果比赛以非Whitespace字符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);
}