计算 C/C++ 行整数的有效方法

Efficient way to count ints in line C/C++

本文关键字:有效 方法 整数 C++ 计算      更新时间:2023-10-16

>我的任务是解决一个相当简单的问题,但我被困在一件事上

给定以下文件结构:

4
124 123 145 152
1400
13 23 51 24 1412 5151 52512 12412...
...

我应该对数据执行各种任务,但在对它做任何事情之前,我必须检查第一行中的 int 是否对应于第 2 行中的整数(第 3 行和第 4 行相同)问题是元素的数量可以达到 150 000,int 值介于 (1;2 000 000) 之间,因此使用 getline 可能会有问题 (afaik),因为它会占用大量资源。Cin 将忽略空格和,所以我永远不会知道何时结束我无法修改原始文件,我尝试使用尽可能少的资源。

嗯,

不确定我是否完全理解这个问题,但为什么不使用 getline 将包含 1400 个整数的行存储为字符串。之后使用 istringstream 确保您读取 1400 个整数。也许是这样的:

getline(cin, line);
while(iss >> n && i++ < numOfInts) {}

然后在外面确保 i == numOfInts。这样你永远不会真正存储 1400 个整数,你只会不断覆盖之前的整数

您可以创建一个自定义函数来获取整数值,如下所示:

int getints(){
    int ctr = 0;
    char ch;
    int sign = 1, n=0;
    while(ch!='n'){
        while(ch==' ' || ch=='t')
            ch = getchar();
        if(ch=='-'){
            sign = -1;
            ch = getchar();
        }
        while(ch >= '0' && ch <= '9'){
            n = n*10 + ch - '0';
            ch = getchar();
        }
        n *= sign;
        ++ctr;
    }
    return ctr;
}

此函数将返回一行中扫描的整数数。只需检查一行中应该出现的整数数即可。它基本上跳过所有空格字符,并在找到换行符后终止输入。