如果我不知道每个列表中有多少个数字,如何将给定数量的数字列表作为输入?
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;
}
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;
}