我正在学习 C++,并且正在使用 cin
处理从外部文本文件加载的数据。
我正在尝试识别需要跳过的大量数据中的某些字符串。
我将如何编写一个函数来跳过文件中/一行中一定数量的字符,或者当我从文件中导入它们时?这样的东西是否已经存在于 iostream 或类似的东西中?
到目前为止,Google 让我很失望。
最佳答案
关于一般跳过:seekg
关于真正的问题:
您似乎希望将模式与大量(半?)文本进行匹配。由于模式足够长,您可以通过跳过输入延伸来获得好处,所以您似乎真的正在尝试全面发明优化的字符串搜索。
已完成:
- http://en.wikipedia.org/wiki/Boyer_Moore_string_search_algorithm
- http://volnitsky.com/project/str_search/index.html
实现存在于野外(我假设 Boost String Algorithm 应该有它......但也许它太通用了。无论如何我都会看看)
PS.: 振奋精神
此解析器当前正在审查实现 qi::seek[]
指令的增强功能:
- https://github.com/jamboree/boost-jamboree-spirit/blob/master/libs/spirit/repository/example/qi/seek.cpp
- http://boost.2283326.n4.nabble.com/Proposal-for-qi-seek-directive-td3830251.html
这允许在 Spirit 语法中快速跳过。因此,如果您需要一个完整的解析器(甚至可能是扫描器/解析器),那么 Spirit Qi 在性能上确实可以与您匹敌。
一定要:
- 尽可能避免缓冲输入迭代器适配器(取决于语法)
- 如果可以的话,使用“C”语言环境
- 操作输入流缓冲区的迭代器而不是输入流迭代器
关于c++ - 在 C++ 中读取文件时跳过文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541629/