如何在不解析当前行的情况下将文件指针移至下一行

时间:2018-11-30 06:59:08

标签: c++

我们正试图解析文件并遇到一个问题。

如果发现不需要当前行,则问题是将文件指针移至下一行。

假设文件(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));

因此,上面的代码块也读取以//开头的行,并且一直到该行的末尾,从而浪费了时间。

问题是:是否可以跳过以//开头的行。这样可以节省我们将线遍历到底的时间。

感谢您的帮助。

1 个答案:

答案 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