我是初级C ++学生,我正在处理来自外部文件的数据。我试图从我需要跳过的大量数据中散列某些信息。我知道我要找的是什么文字。我如何编写一个跳过文件/一行中一定数量字符的函数,或者在iostream或类似的东西中是否已存在这样的东西?谷歌到目前为止让我失望了。
答案 0 :(得分:3)
一般跳过:seekg
关于真正的问题:
您似乎希望将图案与大量(半?)文本进行匹配。由于模式足够长,你可以通过跳过输入延伸来获得,它真的似乎你正在尝试全面发明优化的字符串搜索。
已经完成:
实现存在于野外(我假设Boost字符串算法应该拥有它......但也许它太通用了。不管怎样我都看看。)
此解析器当前正在审查实现qi::seek[]
指令的增强功能:
这允许在Spirit语法中快速跳过。因此,如果您有一个完整解析器(甚至可能是扫描器/解析器)的情况,Spirit Qi可能真的是您的性能匹配。
请务必:
答案 1 :(得分:1)
#include <iostream>
#include <string>
using std::ifstream;
using std::string;
using std::getline;
ifstream ifs(filename);
if ( ! ifs ) {
/* ERROR CODE IN HERE */
}
string line;
while ( getline(ifs, line) )
{
// line now contains one line from the input file
if ( /* want to skip */ ) {
continue;
}
/* Do something with the line */
}
编辑:一些boost字符串谓词(starts_with,ends_with)可能对while循环中的条件有用。例如,如果您只想处理以“FOO”开头的行,您可以编写
#include <boost/algorithm/string/predicate.hpp>
using boost::starts_with;
while ( getline(ifs,line) )
{
if ( starts_with(line, "FOO") ) {
/* DO SOMETHING */
}
}
http://www.boost.org/doc/libs/1_41_0/doc/html/string_algo.html