I l@ve RuBoard |
![]() ![]() |
Exercise 4.1Create a Stack.h and a Stack.suffix, where suffix is whatever convention your compiler or project follows. Write a main() function to exercise the full public interface, and compile and execute it. Both the program text file and main() must include Stack.h: #include "Stack.h" The header file for our Stack class contains the necessary header file inclusions and the actual class declaration: #include <string> #include <vector> using namespace std; class Stack { public: bool push( const string& ); bool pop ( string &elem ); bool peek( string &elem ); bool empty() const { return _stack.empty(); } bool full() const { return _stack.size() == _stack.max_size(); } int size() const { return _stack.size(); } private: vector<string> _stack; }; The Stack program text file contains the definition of the push(), pop(), and peek() member functions. Under Visual C++, the file is named Stack.cpp. It must include the Stack class header file. #include "Stack.h" bool Stack::pop( string &elem ){ if ( empty() ) return false; elem = _stack.back(); _stack.pop_back(); return true; } bool Stack::peek( string &elem ){ if ( empty() ) return false; elem = _stack.back(); return true; } bool Stack::push( const string &elem ){ if ( full() ) return false; _stack.push_back( elem ); return true; } Here is a small program to exercise the Stack class interface. It reads in a sequence of strings from standard input, pushing each one onto the stack until either end-of-file occurs or the stack is full: int main() { Stack st; string str; while ( cin >> str && ! st.full() ) st.push( str ); if ( st.empty() ) { cout << '\n' << "Oops: no strings were read -- bailing out\n "; return 0; } st.peek( str ); if ( st.size() == 1 && str.empty() ) { cout << '\n' << "Oops: no strings were read -- bailing out\n "; return 0; } cout << '\n' << "Read in " << st.size() << " strings!\n" << "The strings, in reverse order: \n"; while ( st.size() ) if ( st.pop( str )) cout << str << ' '; cout << '\n' << "There are now " << st.size() << " elements in the stack!\n"; } To test the program, I typed in the last sentence of the James Joyce novel, Finnegans Wake. The following is the output generated by the program (my input is in bold):
A way a lone a last a loved a long the
Read in 11 strings!
The strings, in reverse order:
the long a loved a last a lone a way A
There are now 0 elements in the stack!
![]() |
I l@ve RuBoard |
![]() ![]() |