#include <iostream>
#include <fstream>
const bool TRUE=1;
const bool FALSE=0;
using namespace std;
class stack
{
private:
char *data_p;
int where_is_save;
int max_size_of_stack;
public:
stack( int data_size )
{
data_p=(char*)malloc(data_size*sizeof(char));
max_size_of_stack=data_size;
where_is_save=0;
}
~stack()
{
free(data_p);
}
bool get_in(char save_data)
{
if (where_is_save != max_size_of_stack)
{
*(data_p+where_is_save)=save_data;
++where_is_save;
return TRUE;
}
else
return FALSE;
}
bool get_out(char *where_save_p )
{
if (where_is_save)
{
--where_is_save;
*where_save_p=*(data_p+where_is_save);
return TRUE;
}
return FALSE;
}
void clear_data()
{
where_is_save=0;
}
};
int main()
{
//파일을 읽어옵니다.
ifstream inputFile("source.txt");
if(!inputFile)
{
cout << "파일을 열 수 없습니다.\n";
return 0;
}
inputFile.seekg(0,ios_base::end);
stack file_data(inputFile.tellg());
inputFile.seekg(0);
char temp;
//파일을 기록합니다.
while (inputFile.get(temp))
{
file_data.get_in(temp);
}
inputFile.close();
ofstream outputFile("result.txt");
if (outputFile == 0 )
{
cout << "파일을 쓸 수 없습니다.\n";
return 0;
}
//기록을 역으로 재생하며 파일을 출력합니다.
while (file_data.get_out(&temp))
{
if (0>temp)
{
char temp_next;
file_data.get_out(&temp_next);
outputFile << temp_next << temp;
}
else
outputFile << temp;
}
outputFile.close();
return 0;
}