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

时间:2018-03-29 00:53:35

标签: c++ string file search input

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

5e7f4c962f80d36dd2eb8fc9f20780e9
36e9f5c7645900000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
...

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

编辑:我也应该指出我实际上想要返回匹配字符串的位置,所以不可能,例如,一次连接两条线,只删除该连接的\ n字符,搜索和迭代通过,如果没有找到。如果匹配在非空白字符15000上开始,我想返回15000。

1 个答案:

答案 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);
}