从文件中读取

时间:2015-07-09 10:31:46

标签: c++ c++11

如果我以错误的方式解决这个问题,我有点好奇。我试图从两个不同的列表中读取数字,对数字进行排序,然后将所有数字输出到a3rd文件。我知道getline可能不是最佳选择,但我仍然想使用它。

list1 = 1,4,5,18

list2 = 2,3,15,16

输出= 1,2,3,4,5,7,15,16 - 我应该得到什么

我实际上得到了什么 - 1,3,5,16

这是代码的一部分

void sorted(std::ifstream &ifs, std::ifstream &ifs1, std::ofstream &ofs){
//while ((!ifs.eof()) & (!ifs1.eof())){

    //int number = 0;
    //int number1 = 0;
    std::string num1;
    std::string num2;
    //getline(ifs, num1);
    //getline(ifs1, num2);

    while(std::getline(ifs, num1) && std::getline(ifs1, num2)){
    int number = 0;
    int number1 = 0;
    std::stringstream ss1;
    std::stringstream ss2;
    ss1 << num1;
    ss2 << num2;
    ss1 >> number;
    ss2 >> number1;
        //while(ss1 >> number && ss2 >> number1)
        //{
            if (number < number1){
                ofs << number << std::endl;
                ss1 >> number;
                std::cout << "am i doing this right?";
            }
            else{
                ofs << number1 << std::endl;
                ss2 >> number1;
            }

        }

    }

2 个答案:

答案 0 :(得分:1)

getline是最好的选择,毫无疑问,它总是比使用eof的注释代码行更好。正如Joachim在评论中提到的那样,您可以先将文件中的数字读取到std::vector容器,然后在矢量上调用std::sort算法。

答案 1 :(得分:0)

每次迭代都会丢弃每对中的一个数字,因为if (number < number1) ... else块只会写出两个数字中的一个。

...试

        if (number < number1){
            ofs << number << std::endl;
            ofs << number1 << std::endl;
            ...
        }
        else{
            ofs << number1 << std::endl;
            ofs << number << std::endl;
            ...
        }