Ho ricevuto un incarico per la mia classe C++ la scorsa settimana. Penso che alcuni di voi lo troveranno interessante! Sono riuscito a ottenere la maggior parte del codice di giù, ma mi sono bloccato e non riesco a capire questo fuori per la vita di me ... Di seguito sono le linee guida per il processo di criptazione devo mettere in codice:Crittografia di una stringa con stack
il mittente del messaggio immette una parola di quattro lettere, CCCC e un'altra parola di quattro lettere, XXXX.
Il mittente del messaggio immette quindi il messaggio da crittografare.
Il programma analizza il messaggio uno char alla volta e ciascun carattere viene spinto in una pila finché sia il carattere esaminato è nella parola CCCC o la fine del messaggio è incontrato.
Quando il carattere esaminato è uno dei caratteri in CCCC, di stampa che char e continuano stampare e pop i caratteri in cima alla pila fino a quando la pila è vuota o char nella parte superiore della stack è uno dei caratteri in XXXX. Quando viene rilevata la fine del messaggio , stampare il carattere nella parte superiore della pila e continuare a popare e stampare dalla cima della pila fino a quando la pila è vuota.
Ecco un suggerimento: "BUONA" "FORTUNA", essa "Sembra semplice A ME", o come vostro programma direbbe: "OSDNOT EEM LPMIS SU"
Quindi questo è l'incarico vero e proprio.
Quello che sto avendo difficoltà con è l'ultimo bit:
Quando viene rilevato alla fine del messaggio , stampare il carattere in cima allo stack e continuare a pop e stampare dall'alto della pila fino a quando la pila è vuota.
Ora qui è il codice che ho finora:
#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;
}
Quando compilato, il risultato finale mi dà "OSDNOT", che è nell'esempio fornito dal mio professore, quindi so che sto andando giù nella giusta direzione .. Qualsiasi aiuto sarebbe grande, non so nemmeno da dove cominciare a esaminare il codice.
Controlla le dichiarazioni per 'word1' e' word2'. – sblom
Non leggerò tutto questo codice perché è tardi e sono stanco, ma quello che farei per tutti i miei compiti complessi di Informatica è: assicurati di stampare tutti i valori delle variabili che stanno cambiando ad ogni passo. In questo modo puoi vedere dove si trova il problema. –
@sblom hmm perché lo dici? Mi sta bene – rcorrie