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

时间:2016-03-13 22:46:36

标签: c++

我的任务是解决一个相当简单的问题,但我坚持一件事

给定以下文件结构:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

然后在外面确保i == numOfInts。 这样你就永远不会存储1400个整数,你只需要覆盖前一个整数

答案 1 :(得分:0)

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

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;
}

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