簡體   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