相信大家在做许多OJ题目时,遇到往vector数组中输入不确定行和列的数组,那么该如何处理呢?
1、一维数组的不确定输入
这里我们通过cin.get(),这个函数来进行判断,判断输入的是否为回车(也就是换行符),如果输入的是回车,就循环结束,停止输入。
int main()
{
vector<int> arr;
int n=0;
while(cin>>n)
{
arr.push_back(n);
if(cin.get()=='\n')
break;
}
fun(arr);
}
有小伙伴问了,为什么用cin.get()就可以判断了呢?cin为什么不可以?这就需要讲到他们之间的区别:
一般情况下,cin自动跳过输入的空格。如果你要把键盘上输入的每个字符,包括空格和回车键都作为一个输入字符给字符型变量时,回必须使用函数cin.get()格式为 cin.get(字符型变量)
注意:该语句一次只能从输入行中提取一个“字符”。 你输入的5是按照char来保存的,而又当做int来解释输出,因此会输出字符5对应的ASCII码,也就是53!直接cin>>i;就没有答这个问题。
2、二维数组的不确定输入
二维数组的输入需要借助一个一维数组,并且还需要一个string对象。
先用getline输入一行的数据,然后进行的是将这一行的字符串转换为数字,也就是一维数组。然后将这个一维数组插入到input中。
然后将这个一维数组input插入到二维数组matrix中,最后将input清空,重复以上操作即可。直到输入的是空,也就是在输入一个回车,循环结束。
int main()
{
vector<int> input;
string temp;
vector<vector<int>> matrix;
while ((getline(cin, temp)) && temp != "")
{
for (int i = 0; i<temp.size(); ++i)
{
int num = 0;
while (temp[i] != ' '&&temp[i] != '\0')
{
num = num * 10 + (temp[i] - '0');
++i;
}
input.push_back(num);
}
matrix.push_back(input);
input.clear(); //每次循环需要将input数组清空
}
}
**注意:**边特别需要注意的是跳出循环的条件,如果只是while (getline(cin, temp))断的是cin是否成功,只要有输入(包括回车)一定为true,所以可以加上&&temp!="",当读取的行为空时就跳出循环。