现在有一个功能需求,就是读取文件内容,然后进行多关键字匹配。
我用的是把文件内容读取到std::stringstream里面,然后再匹配的办法。
因为你如果分段读,可以两段字符串的分割点会出现关键字,导致遗漏。
可是如果把整个文件读入字符串的话,当文件太大的时候,感觉效率又有问题。
但是我听说std::stringstream是动态扩容的,效率还可以.
不知道有没有大神对这方面比较了解的,求指点迷津
算法问题。假设最长关键字长度为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串就行了 }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。