我们正试图解析文件并遇到一个问题。
如果发现不需要当前行,则问题是将文件指针移至下一行。
假设文件(file.txt)如下:
A quick brown fox
// Blah blah
// Blah blah
jumps over the little lazy dog
在我们的程序中,我们通过执行(骨架)逐行遍历所有文件:
ifstream fp("file.txt");
do {
std::string str;
std::getline(fp, str);
std::cout << str << std::endl;
} while(!foef(fp));
因此,上面的代码块也读取以//开头的行,并且一直到该行的末尾,从而浪费了时间。
问题是:是否可以跳过以//开头的行。这样可以节省我们将线遍历到底的时间。
感谢您的帮助。
答案 0 :(得分:-1)
以下是您问题的直接解决方案:
#include<fstream>
#include<iostream>
using namespace std;
// Prototype
bool startswith(string text, string sub);
// Main driver
int main(int argc, char **argv)
{
string filename("tmp.txt");
ifstream input(filename);
string line;
string sub("//") // substring we'll be hunting in 'line'
if(!input.is_open()){
cerr << filename << " does not exist" << endl;
}
while(!getline(input, line).fail()){
if(!startswith(line, sub)){
cout << line << endl;
}
}
input.close();
return 0;
}
bool startswith(string text, string sub){
// Check whether the string "sub" matches the beginning of the string "text"
int n = sub.length();
string test = text.substr(0, n);
if(test.compare(sub)==0){
return true;
}else{
return false;
}
}
当我使用输入(tmp.txt
)测试此代码时:
A quick brown fox
// Blah blah
// Blah blah
jumps over the little lazy dog
编译方式:
g++ -std=c++11 escape.cpp -o a.out
执行中:
./a.out
输出为:
A quick brown fox
jumps over the little lazy dog