解析多行分隔的字符串输入失败
Parsing string input separated over several lines fails
我正在尝试解析字符串输入,但我的解析方式并不符合我的预期。我看不出哪里错了,希望你能指导我一下。
输入是一个三重字符串输入序列,如下所示
1 4 1 2
1 2 2 4
1 2 4 2
输入是由我无法控制的服务提供的。在该行的末尾没有额外的空格,例如该行是 1 4 1 2
,句号。我目前解析输入的方式是
string line;
while (getline(cin, line) && !line.empty()) input += line;
问题出现在我解析完输入后,变成了
1 4 1 21 2 2 41 2 4 2
-- --
我通过在解析结果中用下划线强调了问题出现的地方。如您所见,下一行的第一个数字与第一个数字连接在一起。这会导致输入无法用于进一步处理,因为 21
和 41
是意外输入。
我希望输入解析的结果是
1 4 1 2 1 2 2 4 1 2 4 2
我尝试通过传入一个输入来手动重现此操作,在输入中我在每行之后手动添加空格,这会产生我想要的结果,但看到该服务没有这样做,我有点不知所措继续。
感谢您花时间阅读本文并感谢您提供的任何帮助。
getline 在 istream 上运行。它读取 istream,直到遇到定界符或文件结尾。它使用直到分隔符(不包括分隔符)的所有字符填充字符串,并将流推进到分隔符之后的一个字符。您已经获得了输入 line-by-line,但随后重新连接了缺少分隔符的每一行。您正在获得带有换行符的数据,但您正在丢弃它。你想用这些数据做什么?
对输入数据 line-by-line 进行操作的规范方法是利用 getline
的 return 值作为您传递给它的 istream
,并且进一步利用 istream
可转换为布尔值。您不需要检查该行是否为空,除非您输入的空行(连续多个换行符)有效。
您可能想要的是:
std::string line;
while (std::getline(std::cin, line))
{
// do something with the line here
}
我正在尝试解析字符串输入,但我的解析方式并不符合我的预期。我看不出哪里错了,希望你能指导我一下。
输入是一个三重字符串输入序列,如下所示
1 4 1 2
1 2 2 4
1 2 4 2
输入是由我无法控制的服务提供的。在该行的末尾没有额外的空格,例如该行是 1 4 1 2
,句号。我目前解析输入的方式是
string line;
while (getline(cin, line) && !line.empty()) input += line;
问题出现在我解析完输入后,变成了
1 4 1 21 2 2 41 2 4 2
-- --
我通过在解析结果中用下划线强调了问题出现的地方。如您所见,下一行的第一个数字与第一个数字连接在一起。这会导致输入无法用于进一步处理,因为 21
和 41
是意外输入。
我希望输入解析的结果是
1 4 1 2 1 2 2 4 1 2 4 2
我尝试通过传入一个输入来手动重现此操作,在输入中我在每行之后手动添加空格,这会产生我想要的结果,但看到该服务没有这样做,我有点不知所措继续。
感谢您花时间阅读本文并感谢您提供的任何帮助。
getline 在 istream 上运行。它读取 istream,直到遇到定界符或文件结尾。它使用直到分隔符(不包括分隔符)的所有字符填充字符串,并将流推进到分隔符之后的一个字符。您已经获得了输入 line-by-line,但随后重新连接了缺少分隔符的每一行。您正在获得带有换行符的数据,但您正在丢弃它。你想用这些数据做什么?
对输入数据 line-by-line 进行操作的规范方法是利用 getline
的 return 值作为您传递给它的 istream
,并且进一步利用 istream
可转换为布尔值。您不需要检查该行是否为空,除非您输入的空行(连续多个换行符)有效。
您可能想要的是:
std::string line;
while (std::getline(std::cin, line))
{
// do something with the line here
}