一行输入多个数字

时间:2014-03-01 12:11:49

标签: c++ input

我想知道如何在一条线路上接受多个号码而不事先知道多少。

例如,如果我输入1 2 3 4,我可以使用:

cin >> a >> b >> c >> d;

但如果我不知道金额是4那么我就不能使用那种方法。将输入存储到向量中的正确方法是什么?

提前致谢

3 个答案:

答案 0 :(得分:7)

您可以读取所有输入,直到std :: string类型的对象中的新行字符,然后从该字符串中提取数字并将它们放置在矢量中。

这是一个随时可用的示例

#include <iostream>
#include <sstream>
#include <iterator>
#include <string>
#include <vector>

int main() 
{
    std::string s;

    std::getline( std::cin, s );

    std::istringstream is( s );

    std::vector<int> v( ( std::istream_iterator<int>( is ) ), std::istream_iterator<int>() );

    for ( int x : v) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

如果您要输入一行数字

1 2 3 4 5 6 7 8 9 

然后矢量的程序输出将是

1 2 3 4 5 6 7 8 9 

在这个程序中,您可以替换语句

std::vector<int> v( ( std::istream_iterator<int>( is ) ), std::istream_iterator<int>() );

std::vector<int> v;
int x;

while ( is >> x ) v.push_back( x );

答案 1 :(得分:0)

把它放在一个循环中:

int x;
while ( cin>>x )
  vec.push_back(x);

答案 2 :(得分:0)

<强> main.cc

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <sstream>

int main() {
    std::vector<int> vec;

    std::string line;
    if(!std::getline(std::cin, line)) return 1;
    std::istringstream iss(line);

    std::copy(std::istream_iterator<int>(iss),
        std::istream_iterator<int>(),
        std::back_inserter(vec));

    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, ", "));

    return 0;
}

<强>标准输入

1 2 3 4 5

<强>标准输出

1, 2, 3, 4, 5,

https://ideone.com/FHq4zi