Recibí una asignación para mi clase de C++ la semana pasada. ¡Creo que algunos de ustedes lo encontrarán interesante! Logré obtener la mayor parte del código, pero estoy atascado y no puedo entender esto por mi vida ... A continuación se muestran las pautas para el proceso de encriptación que debo poner en el código:Cifrado de una cadena con una pila
El remitente del mensaje ingresa una palabra de cuatro letras, CCCC, y otra palabra de cuatro letras, XXXX.
El remitente del mensaje luego ingresa el mensaje para ser encriptado.
El programa analiza el mensaje con un carácter a la vez y cada Char es empujado en una pila hasta ya sea el carácter escaneado está en la palabra CCCC o al final del mensaje es encontrado.
Cuando el carácter analizado es uno de los caracteres de CCCC, la impresión que carbonizan y continúan para imprimir y hacer estallar los caracteres en la parte superior de la pila hasta que la pila está vacía o la carbón en la parte superior de la pila es uno de los caracteres en XXXX. Cuando se encuentra el final del mensaje , imprima el carácter en la parte superior de la pila y continúe mostrando e imprima desde la parte superior de la pila hasta que la pila esté vacía.
Aquí tiene una pista: "BUENA" "SUERTE", que "sonidos simples A MÍ", o como su programa diría: "OSDNOT EEM LPMIS SU"
Así que esa es la tarea real.
Lo que estoy teniendo problemas con es el último bit:
Cuando se encuentra al final del mensaje , imprimir el carácter en la parte superior de la pila y continuar para hacer estallar e imprimir desde la parte superior de la pila hasta que la pila esté vacía.
ahora aquí está el código que tengo hasta ahora:
#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;
}
cuando se compila, el resultado final me da "OSDNOT", que es en el ejemplo proporcionado por mi profesor, así que sé que Estoy yendo por el camino correcto ... Cualquier ayuda sería genial, ni siquiera sé por dónde empezar a examinar el código.
Vuelva a verificar sus declaraciones para 'word1' y' word2'. – sblom
No voy a leer todo este código porque es tarde y estoy cansado, pero lo que haría por todas mis tareas complejas de Computer Science es: asegúrese de estar imprimiendo todos sus valores variables que están cambiando en cada paso. De esa forma puedes ver dónde yace el problema. –
@sblom hmm ¿por qué dices eso? Me parece bien – rcorrie