解析时忽略txt文件中的某些行

时间:2019-03-26 21:53:02

标签: c++ for-loop getline continue

我想从txt文件中读取文件,并将某些行与正则表达式进行比较。 txt文件的第一行应以字符串#FIRST开头。 如果字符串以“#”开头,​​则应忽略该行,然后继续。因此,counter应该具有它执行的值1,并且应该转到第二条if语句if(counter == 1)。但是,它不会转到第二个if语句。

txt文件:

#FIRST
#
#haha

我希望代码运行一次后输出会很好\ n好。

输出为:

   good.

应该是

          good.
          good.

.........

#include <iostream> 
#include <string> 
#include <vector> 
#include <regex> 
#include <fstream> 
#include <sstream>

  int main() {

    std::ifstream input("test.txt");
    std::regex e("#FIRST");
    std::regex b("haha");
    int counter;
    for (counter = 0; !input.eof(); counter++) {
      std::cout << counter << "\n";

      std::string line;
      if (counter == 0) {
        getline(input, line);
        if (std::regex_match(line, e)) {
          std::cout << "good." << std::endl;
          counter++;

        } else
          std::cout << "bad." << std::endl;
        break;
      }

      getline(input, line);
      if (line[0] == '#')
        continue;

      if (counter == 1) {
        getline(input, line);
        if (std::regex_match(line, b)) {
          std::cout << "good." << std::endl;
        } else
          std::cout << "bad." << std::endl;
        break;

      }
    }

    return 0;
  }

1 个答案:

答案 0 :(得分:0)

问题出在第一个break子句中的if语句中。在获得输入的第一行之后,程序会遇到break语句,并立即退出循环。我相信这是您所看到的行为,因此不会在for循环内执行任何其他语句。您将必须将程序重组为类似以下内容:

for loop {
  getline()
  if (counter == <>) {
    // no break
  } else if (line[0] == '#') {
    continue;
  } else {
    // whatever else you want to get done
  }
}