C/C++读入一行不定个数的整数
我想,每个人一开始遇到这个问题,都会觉得挺简单的。但真正实施的时候,可能就会觉得还是有点坑的。毕竟对于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是其下标,最终也是整个数组的长度。
C/C++读入一行不定个数的整数的更多相关文章
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...
- 在JS中如何判断所输入的是一个数、整数、正数、非数值?
1.判断是否为一个数字: Number(num)不为 NaN,说明为数字 2. 判断一个数为正数: var num=prompt("请输入:"); if(Number(num)&g ...
- C++ 输入一行未知个数的整数
C++ 输入一行未知个数的整数 代码: #include<iostream> #include<vector> using namespace std; int main() ...
- 编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示
编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示 效果如下: 实现代码: import java.util.Arrays; import java.util.Scanne ...
- c/c++ 读入一行不确定个数的整数
假设有一个文件,文件的每一行包括n个整数,整数之间以一个空格隔开,文件总共有m行,但是事先不知道n,m.如何每次从文件中读取一行整数放到一个数组中. 可以分为两步:1.首先从文件中读入一行字符串,2. ...
- SQL判断一个数是整数还是小数
DECLARE @number1 AS numeric(10,2),@number2 AS numeric(10,2) SELECT @number1=10.00,@number2=10.2 SELE ...
- sql中,如何获取一个数的整数部分和余数部分
我们测试一下,我要得到的结果是多少周(整数),多少天(余数) 1.获取指定日期到当前日期之间的天数 首先用DATEDIFF() 函数获取指定日期到当前日期的天数 --获取指定日期到当前日期的天数 se ...
- PHP取不定个数数组交集
最近有个需求,有一个N个二维数组,N是动态的,不固定个数,现需取这N个数组的交集内容. 用到的函数是array_intersect_assoc 用法 $result_arr = array_inter ...
- python 判断一个数是整数还是小数
a=81**0.5 s=str(a).split('.') if float(s[1])==0: print('整数') else :print('小数')
随机推荐
- ArcMap Add-in插件开发中解决VS调试时断点不会命中的问题
在VS2010中进行ArcMap Add-in插件开发(ArcEngine10.1,ArcGIS10.1),运行时为.NET4.0,在程序中设置了断点进行调试,但是运行后程序并不会在断点处停止,且原来 ...
- Xcode模拟器不显示SDK版本,反而显示设备ID的解决办法
今天在应用程序中修改了Xcode app 的名称,结果导致Xcode模拟器不显示SDK版本,反而显示设备ID了,感觉特别的忧伤......如图: 进到Xcode->window->Devi ...
- mongodb 使用场景和不使用场景
1.mongodb介绍 MongoDB (名称来自"humongous") 是一个可扩展的高性能,开源,模式自由,面向文档的数据库.它使用C++编写.MongoDB特点: a.面向 ...
- sql 查询服务器硬盘剩余空间
DECLARE @tb1 Table( drive varchar(20), [MB 可用空间] varchar(20)) INSERT INTO @tb1 Exec master.dbo.xp_fi ...
- ${mapred.local.dir}选择策略--Map Task存放中间结果
上篇说了block在DataNode配置有多个${dfs.data.dir}时的存储策略,本文主要介绍TaskTracker在配置有多个${mapred.local.dir}时的选择策略. mapre ...
- C#之委托
委托是C#中非常重要的一个概念,并在C#中得到了丰富的应用,如事件,线程等.那什么是委托呢?具体来说,委托是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可 ...
- NOIP 2015 游记
本来和zly和wxh约好了 高三一起再来玩一次复赛,结果最终只有我一个人来了说...貌似是年段主任不让去...总算见识了比我们学校的YSD更爱管闲事的年段主任. 今年比赛竟然在衢州二中,学校不大,但感 ...
- https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
- iOS 支付宝第三方使用步骤
使用支付宝进行一个完整的支付功能,大致有以下步骤: 1 与支付宝进行签约,获得商户ID(partner)和账号ID(seller) 2 下载相应的公钥私钥文件(加密签名用) 3 下载支付宝SDK 4 ...
- T-Shirt 估算法
T-Shirt Size Estimation (2015-05-11 22:58:18) 转载▼ 产出:产品经理会对每一条需求评估上业务影响力的尺寸,如:XXXL 影响一千万人以上或是可以占 ...