Я получил задание для своего класса C++ на прошлой неделе. Я думаю, что некоторые из вас посчитают это интересным! Мне удалось получить большую часть коды вниз, но я застрял и не могу понять это для жизни меня ... Ниже приведены рекомендации для процесса шифрования я должен поставить в код:Шифрование строки со стеком
сообщения отправителе вводит четырехбуквенное слово, CCCC и еще одно письмо с четырьмя буквами, XXXX.
Затем отправитель сообщения вводит сообщение для шифрования.
Программа сканирует сообщение один символ за один раз, и каждый символ не будет нажат в стеке, пока либо отсканированный символ в слове 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», который в приведенном примере моего профессора, так что я знаю «Я прохожу по правому пути .. Любая помощь будет замечательной, я даже не знаю, с чего начать изучать код.
Дважды проверьте свои объявления для слов «word1» и «word2». – sblom
Я не буду читать весь этот код, потому что уже поздно, и я устал, но то, что я сделаю для всех моих сложных домашних заданий в области компьютерных наук, - это: убедитесь, что вы печатаете все свои значения переменных, которые меняются на каждом шагу. Таким образом, вы можете увидеть, где проблема. –
@sblom хмм, почему ты так говоришь? Это выглядит хорошо для меня – rcorrie