gpt4 book ai didi

c++ - 使用 getline 读取文件和标准输入的结果不同

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:48 24 4
gpt4 key购买 nike

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

我的假设是打印第二行,因为测试文件的第一行实际上是

IDK 3453443 + enter

我说得对吗?)

但真正的问题是,当我这样启动它时:./a.out并输入“IDK 3453443”并按回车键。结果是:

TESTING LINE : IDK 3453443
1

为什么这两个结果不同?

最佳答案

确实,行尾是罪魁祸首。

在十六进制编辑器中查看文件,您会发现 0d 0a 行结束(Windows 或 CRLF),其中代码需要 UNIX 行结束(只是 LF)。

现场观看:

Live On Coliru

您可以通过“吃掉”末尾的所有空格来解决这个问题:

Live On Coliru

std::string pattern = "[ ]*([A-Z]{3}) ([0-9]+)(,[0-9]+)?\\s*";

现在都被接受了。

关于c++ - 使用 getline 读取文件和标准输入的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33149338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com