我正在尝试从输入中读取最后一个整数,例如 -
100 121 13 ... 7 11 81
- 我只对最后一个整数感兴趣,因此想忽略所有 之前的整数。
- 我想过使用
cin.ignore
但这在这里不起作用,因为 未知整数(100 是 3 位数字,13 是 2 位数字等等)
我可以使用循环逐个整数地输入整数,并且对它们不执行任何操作。有更好的办法吗?
最佳答案
这完全取决于您的用例。
从 std::cin
读取未指定数量的整数并不像看起来那么容易。因为,与从文件中读取相比,您不会遇到 EOF 条件。如果您从文件流中读取,那就非常简单了。
int value{};
while (fileStream >> value)
;
如果您使用的是 std::cin
您可以尝试按 CTRL-D 或 CTRL-Z 或任何在您的终端上有效的键来产生 EOF(文件结束)条件。但通常的方法是使用 std::getline 读取完整的行,直到用户按 Enter 键,然后将此行放入 std::istringstream 并从那里提取.
到目前为止,下面给出的一个答案并不是那么好。
所以,下一个解决方案:
std::string line{};
std::getline(std::cin, line);
std::istringstream iss{line};
int value{};
while (iss >> value)
;
你问的是
Is there a better way?
这也取决于一点。如果您只是读取一些整数,那么请采用上述方法。如果您有很多很多值,那么您可能会因为不必要地将许多子字符串转换为整数而浪费时间。
那么,最好先读取完整的字符串,然后使用rfind
找到字符串中最后一个空格,并使用std::stoi
进行转换最后一个子字符串为整数。
警告:在这种情况下,您必须确保(或检查更多行代码)末尾没有空格,并且最后一个子字符串实际上是一个数字。这是大量的字符串/字符摆弄,这很可能可以避免。
因此,我建议使用 getline-stringstream 方法。
关于c++ - 如何忽略输入中的n个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61928590/