c++ - 如何忽略输入中的n个整数

标签 c++ input

我正在尝试从输入中读取最后一个整数,例如 -

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/

相关文章:

javascript - 如何在 android/三星手机的 html 文本输入字段中停止自动大写?

c++ - getaddrinfo 不返回 ipv6 详细信息

c++ - 如何在Qt中发送文件?

webview 输入字段中的 Android 电子邮件友好键盘

安卓 : Keep track of total keystroke while application running in background?

javascript - 通过类名获取ID JQuery

c++ - 为什么出现异常时不显示整数?

c++ - 内联汇编 - 使用 printf 以十进制显示寄存器?

c++ - 在 C++ 中编写 if then else 语句的更有效方法

c++ - C/C++ 的轻量级 OBJ 网格文件加载器?