• 【小技巧】如何输入未知长度的数组,用回车结束输入


    今天做了“去哪儿”的笔试,编程题并不难,但是卡在输入数据上了,数据读都读不进来,很让人恼火。

    一般的题目输入数据会是这样:
    第一行:一个整数n,表示数组长度 (6)
    第二行:n个整数,之间用空格隔开  (1 4 1 1 5 6)

    但是去哪儿的题目挺奇怪,输入只有一行

    第一行:输入n个整数,以空格隔开 (1 3 4 6 7 8)

    这样带来一个问题,读取并存储这些数据有一定的困难,我最开始是用while(cin>>a),但是这样的问题在于程序并不以“回车”作为结束跳出循环,而是一直处在输入数据的状态,即便是我已经吧输入的数据存入数组或者向量,程序依然是在处理输入。后来我又想用getline()函数,但是这个函数把空格也当为一个字符读入,这对于数据的存储是一件很麻烦的事情;后来经过在网上查找资料,我注意到这个问题使用get()函数放入while循环中来处理是个不错的办法

    下面这种情况是知道要输入多少数据,比较好处理一些

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int num;
     7     cin >> num;
     8  
     9     vector<int> vecNum;
    10     int temp;
    11     for (int i = 0; i < num; ++i)
    12     {
    13         cin >> temp;
    14         vecNum.push_back(temp);
    15     }
    16  
    17     for (vector<int>::iterator itr = vecNum.begin(); itr != vecNum.end(); ++itr)
    18     {
    19         cout << *itr << endl;
    20     }
    21  
    22     return 0;
    23 }

    像下面这种情况就像我之前说的,一直会陷入while中,无法执行while后面的数据,这种情况适合需要输入和处理的数据全部都在while中;示例如下,15、16行的数据根本执行不到,因为单步调试就会发现一直是在处理cin

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int a;
     8     vector<int> v(100);
     9     while (cin >> a)
    10     {
    11         cout << -1 * a << endl;
    12         v.push_back(a);
    13         cout << a << endl;
    14     }
    15     cout << "hahah" << endl;
    16     for (int i = 0; i < v.size(); i++)
    17         cout << v[i] * 10 << endl;
    18     return 0;
    19 }

    下面这种就是使用get()的方法,也是目前来说最好的方法,可以读取长度未知的整数;当然也可以每次输入的数据使用vector的push_back()方法,这样就不用担心会下标访问越界,这样的方式适合用在输入不定长度的、以空格分隔、以回车结尾、后面还需需要进一步处理的数据

     1 #include<iostream>
     2 #include<string> 
     3 using namespace std;
     4 int main()
     5 {
     6 int arr[100];
     7 int temp;
     8 int count=0;
     9 char c;
    10 while(((cin>>temp).get(c)))
    11 {
    12      
    13     arr[count]=temp;
    14     if(c=='
    ')
    15         break;
    16     count++;
    17     if(count>=100)
    18         break;
    19 }
    20 for(int i=0;i<=count;i++)
    21     cout<<arr[i];
    22 system("pause");
    23 return 0;
    24  
    25 }

    参考资料:

    https://bbs.csdn.net/topics/391821665

    https://zhidao.baidu.com/question/1895481546423695740.html

    https://blog.csdn.net/loveliuzz/article/details/73555058

  • 相关阅读:
    php之工厂模式
    PHP 给GIF 缩略图实例代码
    WGS84 Mercator project转换的算法(C#)
    .net Enum用法
    Google Maps API编程资源大全
    结对作业
    使用Lightbox制作照片条
    使用css3中transition的页面切换
    使用css3中transition的页面切换(继续创新版)
    iframe中父窗口获取子窗口的元素
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/9766144.html
Copyright © 2020-2023  润新知