开发者社区> 问答> 正文

c++ std::stringstream的效率问题:报错

现在有一个功能需求,就是读取文件内容,然后进行多关键字匹配。

我用的是把文件内容读取到std::stringstream里面,然后再匹配的办法。

因为你如果分段读,可以两段字符串的分割点会出现关键字,导致遗漏。

可是如果把整个文件读入字符串的话,当文件太大的时候,感觉效率又有问题。

但是我听说std::stringstream是动态扩容的,效率还可以.


不知道有没有大神对这方面比较了解的,求指点迷津

展开
收起
kun坤 2020-06-06 16:41:43 1130 0
1 条回答
写回答
取消 提交回答
  • 算法问题。假设最长关键字长度为L。

    你这个需求,简单的做法是开一个deque<char>。然后每次读入L,加入deque末尾,如果deque超过2L,把头部去掉,直到长度刚好为2L。然后在这个长度最长为2L的deque<char>中查找。

    deque<char> dq;
    char buf[BUFSIZE];
    while (!if.eof())
    {
        if.read(buf, BUFSIZE);
        size_t gcount = if.gcount();
        dq.insert(dq.end(), buf, buf+gcount);
        if (dq.size() > 2 * L)
            dq.erase(dq.begin(), dq.begin() + dq.size() - 2*L);
        string s(dq.begin(), dq.end());
        //接下来查找s串就行了
    }



    当然,最好的做法是建一个AC自动机,这样每次读入一个字符就相当于在树上移动一步。http://www.cppblog.com/mythit/archive/2009/04/21/80633.html


    2020-06-06 16:41:48
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载