zoukankan      html  css  js  c++  java
  • 【小技巧】如何输入未知长度的数组,用回车结束输入

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

    一般的题目输入数据会是这样:
    第一行:一个整数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

  • 相关阅读:
    安卓linux真机调试
    Java开发必装的IntelliJ IDEA插件
    在switch中的case语句中声明变量会被提前
    PostgresSQL 数组包含@>
    SQL 增加列、修改列、删除列
    ConcurrentHashMap 的实现原理
    Apache——DBUtils框架ResultSetHandler接口使用
    [转](不理想)Ubuntu下更改主显示器
    [问题记录]Java关于可变参数重载问题的测试
    使用openssl生成双向加密证书(转)
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/9766144.html
Copyright © 2011-2022 走看看