Шифрование строки с помощью стека

На прошлой неделе я получил задание для моего класса C++. Думаю, кому-то из вас будет интересно! Мне удалось расшифровать большую часть кода, но я застрял и не могу понять это хоть на миг... Ниже приведены рекомендации по процессу шифрования, которые я должен поместить в код:

Отправитель сообщения вводит четыре буквенное слово, CCCCи еще одно четырехбуквенное слово, ХХХХ.

Затем отправитель сообщения вводит сообщение для шифрования.

Программа просматривает сообщение по одному символу за раз, и каждый символ помещается в стек до тех пор, пока либо отсканированный символ находится в слове CCCC, либо конец сообщения столкнулся.

Когда отсканированный символ является одним из символов в CCCC, распечатать этот символ и продолжить печатать и выталкивать символы в верхней части стека до тех пор, пока стек не станет пустым или char в верхней части стека является одним из символов в XXXX. Когда конец встречается сообщение, напечатайте символ в верхней части стека и продолжайте извлекать и печатать с вершины стека, пока стек не станет пустым.

Вот подсказка: " ХОРОШО" " УДАЧА", это " МНЕ ПОКАЗЫВАЕТСЯ ПРОСТО", или как ваша программа сказала бы: " OSDNOT EEM LPMIS SU"

Таково фактическое назначение.

С чем у меня возникли проблемы, так это с последним битом:

Когда конец встречается сообщение, напечатайте символ в верхней части стека и продолжайте извлекать и печатать с вершины стека, пока стек не станет пустым.

Теперь вот код, который у меня есть:

#include <string>
#include <iostream>
using namespace std;
class Stack
{
   private:
   char Chars[50];
   int top;
   public:
   int push(char);
   char pop();
   bool isEmpty();
   bool isFull();
   Stack()
   {
      top = 0;
   }
};

int main()
{
Stack theStack;
   char word1[4];
   char word2[4];
   for(int i=0; i < 4; i++){
      word1[i] = ' ';
      word2[i] = ' ';
   }
   char message[500];   
   cout << "Please enter a 4 letter word: ";
   cin >> word1;
   while(word1[4] || !word1[3])
   {
      cout << "Word must be 4 chars long. Try again: ";
      cin >> word1;
   }
   cout << "Please enter another 4 letter word: ";
   cin >> word2;
   while(word2[4] || !word2[3])
   {
      cout << "Word must be 4 chars long. Try again: ";
      cin >> word2;
   }
   cout << "Please enter the phrase to be encrypted (50 chars max): ";
   cin.ignore(1000, '\n');
   cin.getline(message,500);
   int length = strlen(message);
   int count = 0;
   char finalMsg[length];
   //scanner
   for(int i = 0; i < length; i++)
   {
      if(message[i] == word1[0] ||
         message[i] == word1[1] ||
         message[i] == word1[2] ||
         message[i] == word1[3])
      {
         finalMsg[count] = message[i];
         count++;
         if(message[i-1] != word2[0] ||
            message[i-1] != word2[1] ||
            message[i-1] != word2[2] ||
            message[i-1] != word2[3])
         {
            finalMsg[count] =  message[i-1];
            count++;
         }
      }
      else
      {
         theStack.push(message[i]);
      }
   }
   cout << finalMsg << endl;
return 0;
}

int Stack::push(char data)
{
   Chars[top] = data;
   top++;
return top;
}

char Stack::pop()
{
   char ret = Chars[top-1];
   top--;
return ret;
}

bool Stack::isEmpty()
{
   if(top <= 0)
      return true;
   else return false;
}

bool Stack::isFull()
{
   if(top >= 50)
      return true;
   else return false;
}

При компиляции окончательный вывод дает мне " OSDNOT", который есть в примере, предоставленном моим профессором, так что я знаю, что иду вниз по правильному пути .. Любая помощь была бы здорово, я даже не знаю, с чего начать изучение кода.

6
задан Bill the Lizard 26 September 2012 в 00:14
поделиться