Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Welcome to All Test Answers

File Reverser C++

File Reverser
Write a program that opens a text file and reads its contents into a stack of characters.
The program should then pop the characters from the stack and save them in a second
text file. The order of the characters saved in the second file should be the reverse of
their order in the first file.

Answer:



//  File Reverser
#include <iostream>
#include <fstream>
#include "DynStack.h"
using namespace std;

int main()
{
	// Create an input file stream object.
	fstream file1("file1.txt", ios::in);

	// Create an output file stream object.
	fstream file2("file2.txt", ios::out);

	// Create a stack to hold characters.
	DynStack<char> stack;

	char catchChar, ch;

	// Read the characters from file #1
	// and push them onto the stack.
	file1.get(catchChar);
	while (!file1.eof())
	{	
		stack.push(catchChar);
		file1.get(catchChar);
	}

	// Close file #1.
	file1.close();

	// Pop the characters from the stack
	// and write them to file #2.
	while (!stack.isEmpty())
	{
		stack.pop(ch);
		file2.put(ch);
	}

	// Close file #2.
	file2.close();

	// Open file #2 again.
	file2.open("file2.txt", ios::in);

	// Read the characters from file #2
	// and display them.
	file2.get(ch);
	while (!file2.eof())
	{
		cout << ch;
		file2.get(ch);
	}

	// Close file #2.
	file2.close();
	cout << endl;

	return 0;
}



// DynStack template

template <class T>
class DynStack
{
	private:
		struct StackNode
		{
			T value;
			StackNode *next;
		};

		StackNode *top;

	public:
		DynStack()
			{	top = NULL; }
		void push(T);
		void pop(T &);
		bool isEmpty();
};

//*********************************************************
// Member function push pushes the argument onto          *
// the stack.                                             *
//*********************************************************

template <class T>
void DynStack<T>::push(T num)
{
	StackNode *newNode;

	// Allocate a new node & store Num
	newNode = new StackNode;
	newNode->value = num;
	
	// If there are no nodes in the list
	// make newNode the first node
	if (isEmpty())
	{
		top = newNode;
		newNode->next = NULL;
	}
	else		// Otherwise, insert NewNode before top
	{
		newNode->next = top;
		top = newNode;
	}
}

//*********************************************************
// Member function pop pops the value at the top          *
// of the stack off, and copies it into the variable      *
// passed as an argument.                                 *
//*********************************************************

template <class T>
void DynStack<T>::pop(T &num)
{
	StackNode *temp;
	
	if (isEmpty())
	{
		cout << "The stack is empty.\n"; return; } else // pop value off top of stack { num = top->value;
		temp = top->next;
		delete top;
		top = temp;
	}
}
 
//*********************************************************
// Member funciton isEmpty returns true if the stack      *
// is empty, or false otherwise.                          *
//*********************************************************

template <class T>
bool DynStack<T>::isEmpty()
{
	if (!top)
		return true;
	else return false;
}

About

Leave a reply

Captcha Click on image to update the captcha .

error: Content is protected !!