如果我以错误的方式解决这个问题,我有点好奇。我试图从两个不同的列表中读取数字,对数字进行排序,然后将所有数字输出到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;
}
}
}
答案 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;
...
}