gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:02:31 26 4
gpt4 key购买 nike

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

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/

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