C++ 使用getline读取文件和标准输入的结果不同
我的假设是打印第二行,因为testfile的第一行实际上是 IDK 3453443+输入 我说的对吗?) 但真正的问题是,当我像这样启动它时:C++ 使用getline读取文件和标准输入的结果不同,c++,regex,c++11,boost,C++,Regex,C++11,Boost,我的假设是打印第二行,因为testfile的第一行实际上是 IDK 3453443+输入 我说的对吗?) 但真正的问题是,当我像这样启动它时:/a.out,输入“IDK 3453443”,然后按enter键。其结果是: TESTING LINE : IDK 3453443 0 TESTING LINE : 0 有没有想过为什么这两个结果不同?事实上,线端是罪魁祸首 在十六进制编辑器中查看该文件,您将发现0d0a行结束(Windows或CRLF),代码期望UNIX行结束(仅LF) 现场观看:
/a.out
,输入“IDK 3453443”,然后按enter键。其结果是:
TESTING LINE : IDK 3453443
0
TESTING LINE :
0
有没有想过为什么这两个结果不同?事实上,线端是罪魁祸首 在十六进制编辑器中查看该文件,您将发现
0d0a
行结束(Windows或CRLF),代码期望UNIX行结束(仅LF)
现场观看:
TESTING LINE : IDK 3453443
1
您可以通过在末尾“吃掉”所有空格来解决此问题:
TESTING LINE : IDK 3453443
1
现在两者都被接受。您确定文件中没有
\r
之前的\n
?那可能是罪魁祸首。。。尝试string模式=“[]*([A-Z]{3})([0-9]+)([]*|,[0-9]+\\s*)”代码>。或者regex\u search
而不是regex\u match
。不幸的是,新模式在@stribizev仍然不起作用
std::string pattern = "[ ]*([A-Z]{3}) ([0-9]+)(,[0-9]+)?\\s*";