我想从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;
}
答案 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
}
}