【问题标题】:C++ Search For A String Split Across Multiple Lines In a Text FileC++ 在文本文件中搜索跨多行拆分的字符串
【发布时间】:2018-09-07 20:10:58
【问题描述】:

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

5e7f4c962f80d36dd2eb8fc9f20780e9
36e9f5c7645900000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
...

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

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

【问题讨论】:

  • 在 Linux 上,我会 mmap() 整个事情,然后从头到尾蛮力进行,聪明地。

标签: c++ string file search input


【解决方案1】:

您可以一次搜索一个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);
}

【讨论】:

    猜你喜欢
    • 2019-10-24
    • 2010-12-10
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多