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效率基本相同。

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

对于第二步,从一行字符串中解析出整数,以下提供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函数和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倍

作者:cnblogs tenos

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, 文件
, strtok函数
, 方法
, 整数
, res
, atoi
, 一行
, 文件读入字符串
, atoi()
getline()函数
c语言读入一行整数、c 读入一行、c读入一行字符串、易语言读入一行、c 读入一行数字,以便于您获取更多的相关知识。

时间: 2024-10-31 11:55:00

c/c++如何读入一行不确定个数的整数的相关文章

printf-方法二只能精确的求一个数的整数次方,如何改?

问题描述 方法二只能精确的求一个数的整数次方,如何改? double x,y,p; //求n次方(比较精确) scanf("%lf%lf",&x,&y); p=pow(x,y); printf("%lf",p); system("pause"); 方法二 double i,n,sum=1.0,x; //求n次方(不精确) scanf("%lf%lf",&x,&n); for(i=0;i<n

BCD编码的进制数为整数,如何判断这个数是整数还是负数?

问题描述 BCD编码的进制数为整数,如何判断这个数是整数还是负数? BCD编码的进制数为整数,如何判断这个数是整数还是负数?求大神指点啊!!! 解决方案 在二进制码中,为了区分正负数,采用最高位是符号位的方法来区分,正数的符号位为0.负数的符号位为1.剩下的就是这个数的绝对值部分,可以采用原码.反码.补码3种形式来表示绝对值部分.原码最简单,也最好理解.原码就是绝对值的二进制数形式:例如+7的8位二进制原码是00000111,-7的8位二进制原码是10000111.但对于二进制运算而言,原码的运

asp 取一个数的整数 但不是四舍五入,只要有小数,就取大于这个数的整数_应用技巧

如: 0.625 取 1 2.1 取 3 3.6 取 4 <% if fix(a)>a then b=fix(a) else b=fix(a)+1 response.write b end if %> 或者: <% a=0.625 if a<>fix(a) then a=fix(a)+1 else a=fix(a) end if response.write a %> (注:这个测试成功!) ------------- 如果用: <% a=0.625 if

SQL基础

    第三部分  操作数据:SQL               本部分内容           n  SQL基础           n  中级SQL           n  高级SQL       第10章  SQL基础                      本章内容                             SQL介绍                  使用SELECT 语句从表中取数据                  创建新表                  字段

SQL中的五种数据类型

数据|数据类型 简要描述一下SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型 字符型 VARCHAR VS CHAR VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要.他们都是用来储存字符串长度小于255的字符. 假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates.当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符--字符串Bill Gates的长度. 现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取

PHP 和 MySQL 基础教程(一)

mysql|基础教程 HTML 和 PHP .MySQL 的交互 为什么要用到数据库? World Wide Web (WWW) 不仅仅是一个提供信息的地方.如果你有什么东西,作一个网站,同样可以和全世界的人一起分享.但是,这并不是一件很容易的事.当网站越做越大时,你可能会遇到这样的问题: 网站包含了太多的东西,使得访问者不能够很快得得到他们想要的东西.这个问题在某种程度上对一个网站而言是致命的. 访问者想要向你提供信息,而且这些信息必须保存下来以备后用. 上面的两个问题,都可以通过数据库来解决

SQL操作(初级、中级、高级)

高级 操作数据:SQL 操作数据:SQL n  SQL基础  n  中级SQL  n  高级SQL    ======================================================================== n  SQL基础 ¨          ¨          SQL介绍 ¨          ¨          使用SELECT 语句从表中取数据 ¨          ¨          创建新表 ¨          ¨        

SQL数据操作基础(初级)4

数据 用SQL创建新表 注意: 如果你还没有建立自己的数据库,现在就跳回到第三章创建这个库.你绝不能向master,tempdb或任何其他任何系统数据库中添加数据. 从SQL Sever程序组(在任务栏中)中启动ISQL/w程序.出现查询窗口后,从窗口顶部的下拉列表中选择你在第三章所创建的数据库.下一步,在查询窗口中键入下面的SQL语句,单击执行查询按钮,执行这个语句: CREATE TABLE guestbook (visitor VARCHAR(40),comments TEXT,entry

操作数据:SQL基础

数据 本章内容 SQL介绍 使用SELECT 语句从表中取数据 创建新表 字段属性 向表中添加数据 删除和修改表 为了建立交互站点,你需要使用数据库来存储来自访问者的信息.例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简历,所感兴趣的工作等等这样的信息.创建动态网叶也需要使用数据库,如果你想显示符合来访者要求的最好的工作,你就需要从数据库中取出这份工作的信息.你将会发现,在许多情况下需要使用数据库. 在这一章里,你将学会怎样使用"结构化查询语言"(SQL]来操作数据库.SQ