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