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



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

我试图解决上述问题,在输入规范中,给定会有 N 行数字(每行可能有多个数字(。如何获取输入(我正在使用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;
}

对于输入:

1 2 3

0 2 3

0 1 3

0 1 2

我得到的输出是:

12

0 0 0但预期的输出应该是:

3 33 3

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

一种可能的解决方案是使用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;
}
#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 行中的所有输入并将其传递给字符串流。然后从流中提取每个元素并将其推送到相应的向量。

这适用于输入中数字之间的空格。

#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;

}

相关内容

  • 没有找到相关文章

最新更新