输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然

The first character in the input file is the last character in the output file and vice-versa

本文关键字:字符 文件 反之亦然 最后一个 第一个 输入 输出      更新时间:2023-10-16

我想打印出输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然。但我坚持如何打印输出。

我需要使用数组。我将从输入文件读取到字符数组,并从数组写入输出文件。

例:

输入.txt: A B C D E H

输出.txt: H B C D E A

This is my code 
    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    int main()
    {
        string FileName, FileName2;
        string s, temp, FirstChar, LastChar;;
        char again = 'Y';
        bool close = false;
        char MAXSIZE[1024];
        while (close == false)
        {
            cout << "Open the file: ";
            cin >> FileName;
            ifstream ReadFromFile(FileName);
            if (ReadFromFile.is_open())
            {
                cout << "Succeed to open the file!n";
                // Read character from the input to array
                while (!ReadFromFile.eof())
                {
                    ReadFromFile >> MAXSIZE;
                    cout << MAXSIZE << " ";
                }
                cout << endl;
                cout << "Enter the first character: ";
                cin >> FirstChar;
                cout << "Enter the last character: ";
                cin >> LastChar;
                swap(FirstChar, LastChar);
     // I stuck at here
                ifstream in(FileName);
                cout << "Enter a name for a copy file: ";
                cin >> FileName2;
                ofstream out(FileName2);
                while (getline(in, s))
                        out << s << "n";

                cout << "Close the program and then open your copy file.";
                cout << endl << endl;
                close = true;
            }
            else{
                cout << "Failed to open the file!n";
                do {
                    cout << "Do you want to do it again(Y) or Close (N)? ";
                    cin >> again;
                } while (again != 'y' && again != 'Y' && again != 'n' && again != 'N');
                if (again == 'y' || again == 'Y')
                    close = false;
                else
                    close = true;
                cout << endl;
            }
        }
        system("pause");
        return 0;
    }

您的任务(根据您的解释(需要:

1( 从输入文件读取到数组

2( 更改第一个和最后一个字符

3(将数组保存到输出文件

因此,不应从标准输入(键盘(询问第一个和最后一个字符。

#include <iostream>
#include <fstream>
using namespace std;
// filenames can be given as command line arguments
// change the code if you want to read them from standard input
int main(int argc, char* argv[])
{
    ifstream inf;
    ofstream outf;
    size_t counter = 0;
    const size_t MAXSIZE = 1024; // MAXSIZE - name of constant
    char buffer[MAXSIZE];        // buffer - name of array
    // check the command line arguments
    // Alternatively you can define: string InpFileName, OutFileName; 
    // as it is in your code and enter values (cin >>) instead using argv
    // if so, you should change inf.open(argv[1]); to inf.open(InpFileName);
    // and outf.open(argv[2]); to outf.open(OutFileName);
    if (argc != 3)
    {
        cerr << "Two arguments are required:" << endl
            << " 1) name of existing file (to read)" << endl
            << " 2) name of new file (to create)" << endl;
        return 1;
    }
    // open files
    inf.open(argv[1]);
    outf.open(argv[2]);
    // check files
    if (!inf.is_open() || !outf.is_open())
    {
        cout << "ERROR: some trouble with files." << endl;
        return 2; // stop the program
    }
    // process
    // 1) reading
    while (counter < MAXSIZE){
        buffer[counter] = inf.get();
        if (buffer[counter] != EOF)
        {
            counter++;
        }
        else
        {
            counter--; // the last character is not valid
            break; // end of file
        }
    }
    // 2) changing
    char b = buffer[counter];
    buffer[counter] = buffer[0];
    buffer[0] = b;
    // 3) output
    for (int i = 0; i <= counter; i++)
    {
        outf.put(buffer[i]);
    }
    // close files
    inf.close();
    outf.close();
    return 0;
}

更新:

澄清某些不可打印字符(如空格(是第一个或最后一个的情况的任务

看起来像是C++类的家庭作业问题。 一个可能有帮助的提示是将文件划分为 X 字节的块,并以相反的顺序读取这些块。

std::istream::seekg