bool validateCurrencyLine(string line){
cout << "TESTING LINE : " << line << endl;
string pattern = "[ ]*([A-Z]{3}) ([0-9]+)([ ]*|,[0-9]+[ ]*)";
boost::regex expr{pattern};
return boost::regex_match(line,expr);
}
int main()
{
string line;
while(getline(cin,line)){
cout << validateCurrencyLine(line) << endl;
}
return 0;
}
test
文件的内容如下:
IDK 3453443
现在,当我使用./a.out < test
启动程序时,结果为
TESTING LINE : IDK 3453443
0
TESTING LINE :
0
我的假设是打印第二行,因为testfile第一行实际上是
IDK 3453443 +输入
我说错了吗?)
但真正的问题是,当我这样开始时:./a.out
并输入“IDK 3453443”并按回车键。结果是:
TESTING LINE : IDK 3453443
1
为什么这两个结果有所不同?
答案 0 :(得分:0)
确实,行结束是罪魁祸首。
在十六进制编辑器中查看文件,你会发现0d 0a
行结束(Windows或CRLF),其中代码需要UNIX行结束(只是LF)。
现场直播:
<强> Live On Coliru 强>
你可以通过“吃”来解决这个问题。最后的所有空白:
<强> Live On Coliru 强>
std::string pattern = "[ ]*([A-Z]{3}) ([0-9]+)(,[0-9]+)?\\s*";
现在两人都被接受了。