在C ++中添加两列的最佳方法是什么[关闭]

问题描述 投票:0回答:2

我正在尝试做我的家庭作业,我需要一些建议。我有一个文本文件,其中包含由...分隔的数字(两列)。例如,

    123124 , 12312512
    5133421 , 12312412

文件中会有更多行。我需要在第一列和第二列中添加所有数字(需要打印出两者)。然后,我需要添加两列。所以,我的问题是什么是完成任务的最佳方式?提前致谢。我起初在想strtok()。但是,它不起作用,因为我需要打印出第一列和第二列的总和。

c++
2个回答
1
投票

您可以将值读入两个std::vector对象:

// Example input data
std::istringstream in(R"~(

123124 , 12312512
5133421 , 12312412

)~");

// you can open a file instead and none of the
// other code changes:
//
// std::ifstream in("my_data_file.csv");

std::vector<int> col_1;
std::vector<int> col_2;

int i1;
int i2;
std::string comma; // used to skip past the commas

// we read in and test the results of the read
// as the while condition
while(in >> i1 >> comma >> i2)
{
    // We know the read succeeded here so we can safely
    // append the numbers to the ends of the vectors
    col_1.push_back(i1);
    col_2.push_back(i2);
}

// Did we get all the way to the end?
if(!in.eof())
    throw std::runtime_error("bad input"); // must be an input error

// process our vectors here

std::cout << "First column: " << '\n';

for(auto i: col_1)
    std::cout << i << '\n';

std::cout << "Second column: " << '\n';

for(auto i: col_2)
    std::cout << i << '\n';

0
投票

这样的东西会起作用:

#include <iostream>
#include <fstream>

int main(int argc, char **argv)
{
    std::ifstream is(argv[1]);

    for (;;)
    {
        int x1 = 0, x2 = 0;
        char sep = 0;

        is >> x1;
        is >> sep;
        is >> x2;

        // Validate the data.
        if ((sep != ',') or is.eof()) { break; }

        // Data tests valid, use it however.
        std::cout << "read: " << x1 << sep << x2 << std::endl;
    }
}

我真的不喜欢scanf(),这就是原因。这将有效:

int x, y;
fscanf("%d, %d",&x, &y);

如果你将x, y更改为short int,fscanf()将访问无效的内存(繁荣)。

如果你将x, y更改为long int fscanf()会给你不正确的结果。

鉴于这两个选择,我非常希望使用std :: istream。

© www.soinside.com 2019 - 2024. All rights reserved.