如果我不知道每个列表中有多少个数字,如何将给定数量的数字列表作为输入?

How do I take a given number of lists of numbers as input, if I do not know how many number are there in each list?

https://www.spoj.com/problems/TTRGRAPH/

我试图解决上述问题,在输入规范中,给出了N行数字(每行可能有1个以上的数字)。我如何获取输入(我使用的是 C++)?我尝试采用如下所示的输入,但所有数字都被推入第一个向量。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<vector<int>> g(n);
    for(int i=0;i<n;i++)
    {
        int e;
        while(cin>>e and e!='\n')
            g[i].push_back(e);
    }
    for(int i=0;i<n;i++)
        cout<<g[i].size()<<' ';
    return 0;
}

对于输入:

4

1 2 3

0 2 3

0 1 3

0 1 2

我得到的输出是:

12 0 0 0

但预期的输出应该是:

3 3 3 3

如果有人能提出一些有用的建议,那将会很有帮助!谢谢!

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<vector<string>> g(n);
    cin.ignore();
    for(int i=0;i<n;i++)
    {
        string e;
        getline(cin,e);
        stringstream ss;
        ss<<e;
        string temp;
        while(ss>>temp) g[i].push_back(temp);
    }
    for(int i=0;i<n;i++)
        cout<<g[i].size()<<' ';
    return 0;
}

对于 n 的每个值,获取第 n 行中的所有输入并将其传递给 stringstream。然后从流中提取每个元素并将其推送到相应的向量。

一种可能的解决方案是使用 cin.peek():

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<vector<int>> g(n);
    for (int i = 0; i < n; i++)
    {
        int e;
        while (cin >> e) {
            g[i].push_back(e);
            if (cin.peek() == '\n') break;
        }
        cin.clear();
        cin.ignore();
    }
    for (int i = 0; i < n; i++)
        cout << g[i].size() << ' ';
    return 0;
}

这适用于输入数字之间的 space。

#include <stdio.h>
#include <istream>
#include <iostream>
#include <ostream>
#include <vector>

int main()
{
   int n;
   std::cin>>n;
   std::vector<std::vector<int>> g(n);

   for(int i=0;i<n;i++)
   {
        int e;
        while (std::cin >> e) {

           if(std::cin.peek() == ' ')
           {
               g[i].push_back(e);
           }

           if (std::cin.peek() == '\n')
           {
               g[i].push_back(e);
               break;
           }
       }
       std::cin.clear();
       std::cin.ignore();
   }

   for(int i=0;i<n;i++)
       std::cout<<g[i].size()<<' ';

   return 0;

}