c/c++ 读入一行不确定个数的整数

转载 2016年08月29日 13:09:09

c/c++ 读入一行不确定个数的整数


原文地址:www.cnblogs.com/TenosDoIt/p/3724234.html


假设有一个文件,文件的每一行包括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++读取一行字符串输入

这个知识点必须掌握,因为是笔试必备技能!不然连输入都搞不定,何谈后面的? #include #include using namespace std; int main() { //对于cha...
  • Lv_Victor
  • Lv_Victor
  • 2016年09月23日 21:34
  • 2358

c编程:整数的个数。

//给定k(1
  • u012110719
  • u012110719
  • 2014年11月14日 23:24
  • 1814

整数的个数

总时间限制: 1000ms 内存限制: 65536kB 描述给定k(1 输入输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。 输出输出有三行,第一行...
  • judyge
  • judyge
  • 2015年05月06日 08:19
  • 712

11:整数的个数

原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 给定k(1 输入输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个...
  • mayuan2017
  • mayuan2017
  • 2017年09月05日 09:46
  • 266

找出N个整数中最大的K个数

原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun 如题:给出N个整数(N可能很大...
  • alwaystry
  • alwaystry
  • 2017年03月16日 21:53
  • 685

c/c++--C之从文件流中读写整数

本文将介绍在文本流中,读写整数的两个接口– int getw(FILE *fp)和int putw(int w, FILE *fp),并且与你分享改进后的更实用的接口– unsigned int ...
  • zzzzzdddddxxxxx
  • zzzzzdddddxxxxx
  • 2016年12月07日 14:25
  • 701

C语言从stdin读取一行字符串的几种方法

C语言从stdin读取一行字符串的几种方法 gets gets函数的头文件是,原型如下: char *gets(char *s); gets从stdin中读入一行内容到s指定的buff...
  • lichengyu
  • lichengyu
  • 2014年11月30日 11:12
  • 40309

C++如何读取任意数目的整数

要求: 读取整数,按enter结束输入 在C/C++中,一系列的简单数据是存储在数组里,而且,针对输入,一般要知道输入的数据个数,用for循环迭代, 又或者给定一个结束标志的输入,当输入为结束标志时...
  • alxandral_brother
  • alxandral_brother
  • 2016年09月29日 17:05
  • 877

读入一行由空格隔开的数字

当给你一行未知个数的数字时,需要读字符来处理,比较麻烦。 可以用C++封装的stringstream来处理的。#include #include #include using namespac...
  • x_iaow_ei
  • x_iaow_ei
  • 2015年06月15日 21:31
  • 609

C++ 从键盘读入行列不确定的字符串

C++ 从键盘读入行列不确定的字符串,并以空格为间隔将每个字符串保存进二位的vector...
  • Evelyn_LiuZhen
  • Evelyn_LiuZhen
  • 2016年08月07日 21:52
  • 572
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c/c++ 读入一行不确定个数的整数
举报原因:
原因补充:

(最多只允许输入30个字)