繁体   English   中英

C++:如何交换文本文件中的整数?

[英]C++: How to swap integers in text files?

编写一个程序来读取两个输入文件“input1.txt”和“input2.txt”,它们只包含整数。 该程序应形成一个output文件“output.txt”。 该程序应将两个输入文件合并为一个 output 文件。 程序应该比较从两个文件中读取的数字。 在第一列写一个较小的数字,在第二列写一个更大的数字。 在第三列中,写下哪个文件中的数字较小。 如果它们相同,请在第三栏中写“相同”。

我在使用这个程序时遇到了问题,因为首先我是一个初学者,而且我还在学习。 到目前为止,这是我的代码,它不完整,但我不知道下一步该做什么。

int number1, number2, counter1 = 0, counter2 = 0, pom = 0;
ifstream input1;
ifstream input2;
ofstream output;
while (input1 >> number1) {
    counter1++;
    output << number1 << " ";
}
while (input2 >> number2) {
    counter2++;
    output << number2 << " ";
}
if (counter1 > counter2)
    pom = number1;
for (int i = 0; i < counter1; i++) {
    input1 >> number1;
    input2 >> number2;
    if (number1 < number2)
    {
        output << number1 << number2;
        output << "First" << "\n";
    }
    else if (number1 > number2)
    {
        number1 = number2;
        number2 = pom;
        output << number1 << number2;
        output << "Second" << "\n";
    }
    else
    {
        output << number1 << number2;
        output << "Same" << "\n";
    }
        
}


input1.close();
input2.close();
output.close();
return 0;

这是一个简单的例子:

while ((input1 >> number1) && (input2 >> number2))
{
    if (number1 == number2)
    {
        output << number1 << "\t" << number2 << "\t" << "Same\n";
    }
    else
    {
         if (number1 < number2)
         {
             output << number1 << "\t" << number2 << "\t" << "First\n";
         }
         else
         {
             output << number2 << "\t" << number1 << "\t" << "Second\n";
         }
    }
}

在上面的示例中,两个数字都被读取。 while循环已经开始。

我喜欢先从==条件开始,通常以 2 次比较结束,并且可以很好地嵌套。

编辑1:output 简化
还有一个替代方案,它只有一个 output 语句:

while ((input1 >> number1) && (input2 >> number2))
{
    int largest;
    int smallest;
    std::string result;
    if (number1 == number2)
    {
        smallest = number1;
        largest  = number1;
        result   = "Same";
    }
    else
    {
         if (number1 < number2)
         {
             smallest = number1;
             largest  = number2;
             result   = "First";
         }
         else
         {
             smallest = number2;
             largest  = number1;
             result   = "Second";
         }
    }
    output << smallest << "\t" << largest << "\t" << result << "\n";
}

您的代码有很多错误。 就像您没有向 stream 函数提供输入一样,您首先计算位数然后进行比较。 此代码功能齐全。

[input1.txt]
1 2 4 5 6 7 8 8
[input2.txt]
1 9 8 7 6 5 3 4
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    int number1, number2;

    ifstream f1("input1.txt");
    ifstream f2("input2.txt");
    ofstream output("output.txt");
    if (!f1.is_open() || !f2.is_open() || !output.is_open())
    {
        cout << "One of your file isn't opening.";
        return 0;
    }
    while ((f1 >> number1) && (f2 >> number2))
    {
        if (number1 > number2)
            output << number1 << " " << number2 << " First\n";
        else if (number2 > number1)
            output << number2 << " " << number1 << " Second\n";
        else
            output << number1 << " " << number2 << " same\n";
    }
    f1.close();
    f2.close();
    output.close();
    return 0;
}
[output.txt]
1 1 same
9 2 Second
8 4 Second
7 5 Second
6 6 same
7 5 First
8 3 First
8 4 First

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM