c++ cin获取 一行 个数未知 的数字
刷算法时遇到了这种形状的输入
【输入形式】
输入数据为一行用空格分开的N个整数,表示小和尚的位置。台阶序号从1算起,所以最后一个小和尚的位置即是台阶的总数。(N<100, 台阶总数<1000)
【样例输入】
1 5 9
找到最简洁易读的方法是用getchar() 读取下一个字符是否是’\n’
C++ 输入一行数字或字符串(未知个数),以空格间格,换行后结束输入并输出
//读取的部分如下
int a;
while (cin >> a) {
vec.push_back(a);
char ch = getchar();//通过getchar()来判断最后输入回车符结束
if (ch == '\n')
break;
}
但是这里由程序员自己进行了结束的判断,有没有办法让stream对象自动处理呢?
我找到了一个方法
std::getline 获取单行输入转为string
std::stringstream 将string流入int
最后将int插入vector中
/*
获取 一行输入 个数未知 的数字,比如
1 5 9
*/
//获取标准输入的iostream
#include <iostream>
#include<string>
//获取string输入的sstream
#include<sstream>
//存储未知个数数字的vector(有心力也可以自己实现链表之类的代替)
#include<vector>
using namespace std;
int main() {
vector<int> vec;
string str;
stringstream sstream;
//从cin中得到一行字符串
std::getline(cin, str);
//str进入sstream缓冲
sstream<< str;
int tmp;
//将sstream中数字逐个输入
while(sstream>>tmp)
{
vec.push_back(tmp);
}
//输出结果
cout << "接收到的数字如下\n";
for (int i : vec) {
cout << i<<'\n';
}
}