对“键盘读入”的处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014633283/article/details/48804239

一、问题的引入

最近在练习机试题,遇到一个很棘手的问题:“**从键盘录入一行数据,数据之间用空格分隔,最后以换行符结束**”。之前遇到键盘输入,都是“输入一个数据”之后直接按“回车键”,所以这一块没有像很多。这次正好借这个机会,多思考了以下该类问题。


二、问题的解决

情形一(2016滴滴出行校招笔试题):

从键盘录入一行整数,整数之间用“空格”分隔,最后以“换行符”结束,试将该组数据存入vector矩阵中。样例输入如下:


我的处理如下,直接附上代码:

vector<int> vec;
int i;
char c;
while((c=cin.get())!='\n' )
{
cin.unget(); 
cin >> i;//cin>>在读入的过程中会自动忽略空格 //字符,而cin.get()会将空格字符也读入 
vec.push_back(i); 
}

说明:正如注释中所写,“cin>>在读入的过程中会自动忽略空格字符”,因而在样例输入中,第一个"1"的后一个字符"空格字符"被读入到c变量中并被unget之后,“cin>>”可以跳过该空格字符,直到读取到整数“2”。

扫描二维码关注公众号,回复: 3640274 查看本文章


情形二(2016滴滴出行校招笔试题): 

从键盘录入一个字符串,以“换行符”结束。该字符串由“;”隔成n段,每一段中有m个整数,整数之间用“空格”分隔,试将该数组存入vector<vector< int>>矩阵中,样例输入和数组示例如下:

我的处理如下,直接附上代码:

vector<vector< int>> vecvec;
vector< int> vec_temp;
char c;
int i;
while((c=cin.get())!='\n' )
{
cin.unget(); 
while((c=cin.get())!=';' &&c!='\n') 
{ 
cin.unget(); 
cin >> i; 
vec_temp.push_back(i); 
} 
vecvec.push_back(vec_temp); 
vec_temp.clear();
if(c!=';' ) 
cin.unget();
}



猜你喜欢

转载自blog.csdn.net/u014633283/article/details/48804239