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

时间:2017-06-22 04:18:31

标签: c++ arrays fstream swap

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

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

示例:

  

Input.txt:A B C D E H

     

output.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;
    }

2 个答案:

答案 0 :(得分: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;
}

<强>更新

澄清一些不可打印的角色(如空格)是第一个或最后一个

的情况下的任务

答案 1 :(得分:-1)

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

的std :: istream的:: seekg