c/c++ 读入一行不确定个数的整数
假设有一个文件,文件的每一行包括n个整数,整数之间以一个空格隔开,文件总共有m行,但是事先不知道n,m。如何每次从文件中读取一行整数放到一个数组中。
可以分为两步:1、首先从文件中读入一行字符串,2、然后从这一行字符串中解析出整数。
对于第一步,我们可以有c、c++两种风格的做法
c风格:
FILE *fp = fopen("input.txt", "r");
char buf[10000];
while(fgets(buf, 10000, fp))
{
//从buf解析出整数
}
c++风格:
ifstream infile("input.txt");
string s;
while(getline(infile, s))
{
//从s中解析出整数
}
经过测试如果不考虑解析整数的时间,这两种方法耗时相差不大,说明getline和fgets效率基本相同。
对于第二步,从一行字符串中解析出整数,以下提供3中方法, 为了简单,我们只是返回从字符串中解析出的整数个数,并没有把他们存入数组
方法1:利用字符串流istringstream
int getInt(string &s)
{
istringstream iss(s);
int num, res = 0;
while(iss >> num)
res++;
return res;
}
方法2:利用strstr函数和atoi函数
int getInt(const char *buf)
{
const char *loc = buf;
int res = 0;
atoi(buf);
loc = strstr(buf," ");
while(loc != NULL)
{
atoi(loc+1);
res++;
loc = strstr(loc+1, " ");
}
return res;
}
方法3:利用strtok函数(该函数用法可参考关于函数strtok和strtok_r的使用要点和实现原理(一))和atoi函数
int getInt(char *buf)
{
char *p = strtok(buf, " ");
int res = 0;
while(p)
{
atoi(p);
res++;
p = strtok(NULL, " ");
}
return res;
}
这三种方法的耗时,方法2和方法2基本相同(方法3的时间略多),方法1差不多是方法2的10倍
【版权声明】转载请注明出处:
c/c++ 读入一行不确定个数的整数的更多相关文章
- 在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++读入一行不定个数的整数
我想,每个人一开始遇到这个问题,都会觉得挺简单的.但真正实施的时候,可能就会觉得还是有点坑的.毕竟对于C/C++这样成熟而使用广泛的语言而言,对于这个简单的问题竟然没有一个简洁有力甚至一行代码的解决方 ...
- SQL判断一个数是整数还是小数
DECLARE @number1 AS numeric(10,2),@number2 AS numeric(10,2) SELECT @number1=10.00,@number2=10.2 SELE ...
- sql中,如何获取一个数的整数部分和余数部分
我们测试一下,我要得到的结果是多少周(整数),多少天(余数) 1.获取指定日期到当前日期之间的天数 首先用DATEDIFF() 函数获取指定日期到当前日期的天数 --获取指定日期到当前日期的天数 se ...
- python 判断一个数是整数还是小数
a=81**0.5 s=str(a).split('.') if float(s[1])==0: print('整数') else :print('小数')
- lintcode:四个数之和
题目 四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d). 样例 例如,对于给定的整数数组S=. 满足要求的四元组集合为: (-1, 0 ...
- 第2章 数字之魅——寻找最大的K个数
寻找最大的K个数 问题描述 在面试中,有下面的问答: 问:有很多个无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢? 答:可以这样写:int array[100] …… 问:好,如果有 ...
随机推荐
- Fiddler抓包11-HTTPS证书Actions无法导出问题
前言 在点Actions时候出现Export Failed:The root certificate could not be located.最近有很多小伙伴在fiddler导出证书的时候,遇到无法 ...
- 《剑指offer》-中序遍历下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode { in ...
- Ext.js入门:模板(四)
1.Ext.DomHelper简介2.Template语法使用简介3.Template简单应用4.Template中使用转换函数5.使用模板的自定义接口6.XTemplate应用 一:Ext.DomH ...
- SG 大法(Sprague-Grundy函数)
SG函数的定义: g(x) = mex ( sg(y) |y是x的后继结点 ) 其中mex(x)(x是一个自然是集合)函数是x关于自然数集合的补集中的最小值,比如x={0,1,2,4,6} 则mex( ...
- jxl的使用总结(java操作excel)
jxl.jar是通过java操作excel表格的工具类库: jxl.jar包:链接:http://pan.baidu.com/s/1o8qFJHw 密码:5jyq 1:通过模拟实现创建一个表格,然后模 ...
- POJ 3190 Stall Reservations【贪心】
POJ 3190 题意: 一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作.给你每头奶牛的指定时间的区间(闭区间),问你最小需要多少机器.思路:先按奶牛要求的时间起始点进行从小到大排序 ...
- xftp和xshell有什么区别
XshellXshell是一个用于MS Windows平台的强大的SSH,TELNET,和RLOGIN终端仿真软件.它使得用户能轻松和安全地从Windows PC上访问Unix/Linux主机.Xft ...
- day16--HTML、CSS、JavaScript总结
HTML 一大堆的标签:块级.行内 CSS position background text-align padding font-size background-image z-index ...
- URAL - 1078 Segments
URAL - 1078 题目大意:有n条线段,一个线段a 完全覆盖另一个线段b 当且仅当,a.l < b.l && a.r>b.r.问你 一个线段覆盖一个线段再覆盖一个线段 ...
- 决策树分类算法及python代码实现案例
决策树分类算法 1.概述 决策树(decision tree)——是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探测式的知识发现 ...