从文件中读取

Reading From Files

本文关键字:读取 文件      更新时间:2023-10-16

我有点好奇我是不是走错了路。我试图从两个不同的列表中读取数字,对数字进行排序,然后将所有数字输出到第3个文件。我知道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;
            }
        }
    }

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

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

试试……

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