Advertisement
Guest User

Palindromic numbers test

a guest
Dec 5th, 2011
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct stackelem
  6. {
  7.     stackelem* next;
  8.     char payload;
  9. };
  10.  
  11. char temp [128];
  12.  
  13. class stack
  14. {
  15. private:
  16.   stackelem *data;
  17.  
  18. public:
  19.  
  20.   stack () {data = NULL;}
  21.  
  22.   void reset() {
  23.     while (data) pop();
  24.   }
  25.  
  26.   bool empty() {
  27.     return data ? false : true;
  28.   }
  29.  
  30.   void push (char value)
  31.   {
  32.       stackelem* newelem = new stackelem;
  33.       newelem->next = data;
  34.       newelem->payload = value;
  35.       data = newelem;
  36.   }
  37.  
  38.   char pop()
  39.   {
  40.     if (data->payload)
  41.     {
  42.         char rvalue = data->payload;
  43.         stackelem* old = data;
  44.         data = data->next;
  45.         delete old;
  46.         return rvalue;
  47.     }
  48.     else {
  49.         cerr << "Stack is empty \n";
  50.         return 0;
  51.     }
  52.   }
  53.  
  54. };
  55.  
  56. int main ()
  57. {
  58.     stack st;
  59.     fstream file ("input.txt", ios::in);
  60.     if (!file)
  61.     {
  62.         cerr << "File not opened\n";
  63.         return -1;
  64.     }
  65.  
  66.     while (file)
  67.     {
  68.         st.reset();
  69.         file.getline (temp, sizeof(temp));
  70.  
  71.         // clean noise characters
  72.  
  73.         int j = 0;
  74.         for (int i = 0; temp[i]; i++)
  75.             if ((temp[i] >= '0') && (temp[i] <= '9'))
  76.                 temp[j++] = temp[i];
  77.  
  78.         temp[j]=0;
  79.  
  80.         cout << "processing [" << temp << "] : ";
  81.  
  82.         // stack algorithm start
  83.  
  84.         if (j) {
  85.             int k;
  86.  
  87.             for (k = 0; k < j/2; k++)
  88.                 st.push (temp[k]);
  89.  
  90.             if (j&1)
  91.                 k++;
  92.  
  93.             do
  94.             {
  95.                 if ( st.pop() != temp[k++] )
  96.                 {
  97.                     cout << "not symmetric [" << k << "]" << endl;
  98.                     temp[k] = -1;
  99.                     break;
  100.                 }
  101.  
  102.             } while (temp[k]);
  103.  
  104.             if (!temp[k])
  105.                 cout << "symmetric " << endl;
  106.         }
  107.     }
  108.  
  109.     return 0;
  110. }
  111.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement