Mega Code Archive

 
Categories / C++ Tutorial / Data Types
 

Stack implementation with constructor

#include <iostream> #include <assert.h> using namespace std; class ch_stack { public:    explicit ch_stack(int size): max_len( size), top(EMPTY)    { assert(size > 0);s = new char[size]; assert(s != 0);}    ch_stack();    ch_stack(const ch_stack& str);    ch_stack(int size, const char str[]);   ~ch_stack() { delete []s; }    void  reset() { top = EMPTY; }    void  push(char c) { s[++top]= c; }    char  pop() { return s[top--]; }    char  top_of() const { return s[top]; }    bool  empty() const { return (top == EMPTY); }    bool  full() const { return (top == max_len - 1); } private:    enum  { EMPTY = -1 };    char*  s;                  int    max_len;    int    top; }; //default constructor for ch_stack ch_stack::ch_stack():max_len(100),top(EMPTY) {    s = new char[100];    assert(s != 0); } //domain transfer ch_stack::ch_stack(int size, const char str[]):    max_len(size) {    int i;    assert(size > 0);    s = new char[size];    assert(s != 0);    for (i = 0; i < max_len && str[i] != 0; ++i)       s[i] = str[i];    top = --i; } //Copy constructor for ch_stack of characters ch_stack::ch_stack(const ch_stack& str):    max_len(str.max_len),top(str.top) {    s = new char[str.max_len];    assert(s != 0);    memcpy(s, str.s, max_len); } int cnt_char(char c, ch_stack s) {    int  count = 0;    while (!s.empty())       count += (c == s.pop());    return count; } int main() {    ch_stack  typea(100);      ch_stack  typeb;           ch_stack  typec(50, "this is a test");      ch_stack  typed(typec);    char reverseline[200];    char a [30] = {"aaaa"};    char b [40] = {"bbbb"};    int  i = 0;    cout << cnt_char('a', typec) << endl;    typea.reset();    while (a[i])       if (!typea.full())     typea.push(a[i++]);    i = 0;    while (!typea.empty())       reverseline[i++] = typea.pop();    reverseline[i] = '\0';    cout << reverseline;    i = 0;    while (b[i])       if (!typeb.full())     typeb.push(b[i++]);    i = 0;    while (!typeb.empty())       reverseline[i++] = typeb.pop();    reverseline[i] = '\0';    cout << reverseline;    i = 0;    while (!typec.empty())       reverseline[i++] = typec.pop();    reverseline[i] = '\0';    cout << reverseline;    i = 0;    while (!typed.empty())       reverseline[i++] = typed.pop();    reverseline[i] = '\0';    cout << reverseline; }