【C++】vector数组的不确定输入

  相信大家在做许多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!="",当读取的行为空时就跳出循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值