2017-06-22 55 views
0

我想输出输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然。但我坚持如何打印输出。我需要用数组。我将从输入文件读入字符数组,并将数组写入输出文件。输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然

实施例:

INPUT.TXT:A B C dËħ

output.txt的:H B C d E中的

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; 
    } 
+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; 
} 

UPDATE:

澄清案件的任务时,一些非打印字符(如空格)是第一个或最后一个

+0

我卡在第3步 –

+0

你可以让它更容易,因为我只是一个编程新手 –

+0

我已经添加了一些注释并更改了代码以使它更容易 – VolAnd

-1

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

的std :: istream的:: seekg

相关问题