当前位置:天才代写 > tutorial > C语言/C++ 教程 > c/c++如何读入一行不确定个数的整数

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

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:45

假设有一个文件,文件的每一行包罗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函数和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

 

    关键字:


天才代写-代写联系方式