如何在用空格分隔的行中获得无限输入?

时间:2019-03-31 11:20:57

标签: c++

我想做的是重载Book类的>>运算符,以在一行中从用户那里获取未知数量的整数。之后,我需要创建一个数组。

我尝试过:

istream& operator>>( istream& in, Book& b )
{
    int x;

    delete[] b.editionYears;
    b.editionNo = 0;
    b.editionYears = new int[0];

    cin>>x;

    b.addEdition(x);

    return in;
}

我用

称呼它
cout << A << endl;

在测试类中,其中A是Book对象。

我尝试过,但是在这里,当用户输入“ 1 2 3 4”之类的内容时,它只会删除该数组并向其中添加1,在第二个调用中它会再次删除1并添加2。

我期望的是,如果用户输入“ 1 2 3 4”,则应删除editionYears数组,再次创建并向其中添加1,2,3,4。

那我该怎么做呢?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

考虑使用std::vector而不是动态分配的数组。有多种方法可以做到这一点。您可以要求用户输入要输入的整数数,可以要求用户在输入完成后输入-1之类的数字,也可以要求用户在一行中输入所有整数,然后将其读取到stringstream中,然后转换为int s并将push_back转换为向量。前两种方法实现起来很简单,因此这里是第三种方法的示例实现:

#include <iostream>
#include <vector>
#include <sstream>

int main()
{
  std::vector<int> vec;
  std::cout << "please enter numbers in a line" << std::endl;
  std::string line;
  std::getline(std::cin, line);
  std::istringstream ss(line);
  int i;
  while (ss >> i)
  {
    vec.push_back(i);
  }

  return 0;
}

答案 1 :(得分:1)

您的问题是使用cin。尝试使用std::getline

这个其他答案可能会帮助https://stackoverflow.com/a/5838803/5355195