如何用逗号c ++分隔的数字对填充2个向量

时间:2017-02-06 02:15:07

标签: c++ vector

用户输入以逗号分隔的数字对列表。 示例... 1, 1 4, 67 90, 87 OR:

30, 50

560, 70

90, 40

我必须使用这些数字填充2个向量。每对中的第一个进入第一个向量,每对中的第二个数字进入第二个向量。

我知道如何阅读矢量以及如何打印出来......

vector<int> v;
int i;
while (cin >> i)
{
    v.push_back(i);
}
// print out the vector
for (auto x : v)
{
    cout << x << ", ";
}

但我不确定如何填充2个载体

3 个答案:

答案 0 :(得分:0)

如果你这样做?

vector<int> v; //vector 1
vector<int> vv; //vector 2
int i;int j;
while (cin >> i)
{
    v.push_back(i);
    cin >> j;
    vv.push_back(j);
}
// print out the first vector
for (auto x : v)
{
    cout << x << ", ";
}

// print out the second vector
for (auto y : vv)
{
    cout << y << " ";
}

答案 1 :(得分:0)

我使用下面的代码制作了你想要的东西。此代码假定用户输入采用您想要的形式(number1,(space)number2),当单词&#34; over&#34;给出。每行的number1存储在名为v1的向量中,每行的number2存储在名为v2的向量中。

int main()
{
    vector<string> v;
    vector<int> v1;
    vector<int> v2;
    string inp;
    do
    {
        cin >> inp;
        v.push_back(inp);
    }
    while (inp.compare("over") !=0 );

    for (int i=0; i<v.size(); i++)
    {
        if (v[i].compare("over") != 0){
            if (i%2==0){
                v1.push_back( atoi( v[i].c_str() ) );
            } else {
                v2.push_back( atoi( v[i].c_str() ) );
            }
        }
    }

    cout << "v1" << endl;
    for (int i=0; i<v1.size(); i++)
    {
        cout << v1[i] << endl;
    }

    cout << "v1" << endl;
    for (int i=0; i<v2.size(); i++)
    {
        cout << v2[i] << endl;
    }

    return 0;
}

答案 2 :(得分:0)

当我不得不做这样的事情时,我通常会从一个小提取操作符开始读取并验证(但忽略)分隔符:

std::istream &operator>>(std::istream &is, char const *delim) {

    while (isspace((unsigned char)*delim))
        ++delim;

    while (isspace((unsigned char)is.peek()))
        is.ignore(1);

    while (*delim == is.peek()) {
        ++delim;
        is.ignore(1);
    }

    if ('\0' != *delim)
        is.setstate(std::ios::failbit);

    return is;
}

有了这个,我们可以这样做:

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

int a, b;
while (is >> a >> "," >> b) {
    u.push_back(a);
    v.push_back(b);
}

然而,我的直接倾向是考虑你正在阅读的两个值之间的关系。如果它们密切相关,那么最好创建一个结构来容纳两者,然后创建这些结构的向量(对于与上面所示类似的结构类型,重载为operator>>)。 / p>