我想,每个人一开始遇到这个问题,都会觉得挺简单的。但真正实施的时候,可能就会觉得还是有点坑的。毕竟对于C/C++这样成熟而使用广泛的语言而言,对于这个简单的问题竟然没有一个简洁有力甚至一行代码的解决方案,依然是让人觉得挺震惊的。

在 C/C++ 中,由于整数读取通常是会忽略空格、制表符、换行符等等的,所以当一行整数为不定数目的读取时,事情就变得有点棘手了。

由于对换行符的忽略,你无法判断此时行是否结束。

在C++中,我们通常可以直接把 cin 读取的返回作为条件判断以此来判断输入是否成功,不成功则不再继续 cin 从而退出循环,来完成对不定数目数据的读入。

一开始可能会这样想:while (cin >> a[n++]);

然后正如上述对换行符的忽略,换行之后 cin 并没有 fail (可参考 cin.fail() 方法)。

然后可能会有如下想法:

 int temp;
while (true)
{
cin >> temp;
if (temp == '\n') break;
a[n++] = temp;
}

但依然不行。因为数据中很可能有与 '\n' ASCII 码相同的整数值,如果此时就 break 这样读入的数据不完整了。

然后我开始查找和提问,具体可参考下述链接的问题和讨论:

http://segmentfault.com/q/1010000002782266

事实上,c++ 强大的支持是完全可以用已有的功能解决的,实在不行大不了总是可以读入字符串再解析的嘛~

具体可以由上述链接中的答案,参考 sstream 和 sscanf。

并且,c++标准库本身就重载了istream& operator>> (istream& (*pf)(istream&));,让用户自行处理一些特殊的input需求。

然而对于一个初入C++坑的骚年而言,这些我依然觉得不熟悉不简明。

再继续检索了一些网上的内容之后,还是用一个类C的方式,解决了这个问题。

用到字符串,同时解析数字部分直接交给sscanf函数解决。既可以理解又保持简洁,让问题不至于过于深究了。

方案如下:

 #include <string>
#include <iostream>
using namespace std; char buffer[];
char* p = buffer; gets(buffer);
while (*p != )
{
// 过滤空格与缩进
while (*p == ' ' || *p == '\t') p++; // 读整数
if (sscanf(p, "%d", &a[n++]) == ) break; // 偏移指针到非数字部分
p++;
while (*p >= '' && *p <= '') p++;
}

其中 a 是存储整数的数组,n是其下标,最终也是整个数组的长度。

最新文章

  1. Delphi DLL的创建、静态及动态调用
  2. Redis学习笔记一:数据结构与对象
  3. JavaScript初学者应注意的七个细节(转)
  4. [Tips]解决HG之waiting for lock on repository
  5. 深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
  6. Unity目录结构
  7. python笔记之函数
  8. Jquery给网页的title取值和赋值
  9. C++11智能指针的深度理解
  10. 【PMP】关键路径法与关键链法
  11. Linux LB--负载均衡和高可靠
  12. 什么是 MIME TYPE?
  13. Redis实战总结-Redis的高可用性
  14. JavaScript插件:快速选择日期----jedate日历插件
  15. python基础----&gt;python的使用(五)
  16. A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
  17. chrome中,BackstopJS 使用cookie文件后依旧提示需要登录
  18. 大象——Thinking in UML
  19. 认识CSS中布局之文档流、浮动、定位以及叠放次序
  20. 海盗船长小米首页小船来回摆动CSS3.0效果

热门文章

  1. 开发一个简单的python计算器
  2. google书签找回
  3. js中正则表达式 ---- 现成
  4. java map的默认排序问题
  5. 服务器asp.net 3.5 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
  6. textbox button 模拟fileupload
  7. centos 6安装epel
  8. js判断qq浏览器
  9. 根据序列图像聚焦区域获取深度 Shape From Focus
  10. [导读]Learning from Imbalanced Classes