先週、C++ クラスの課題を受け取りました。面白いと思う方もいらっしゃると思います!私はコードのほとんどをダウンさせることができましたが、私は立ち往生していて、私の人生のためにこれを理解することはできません.以下は、コードに入れなければならない暗号化プロセスのガイドラインです:
メッセージ送信者は、4 文字の単語CCCCと別の 4 文字の単語 XXXXを入力します。
次に、メッセージの送信者は、暗号化するメッセージを入力します。プログラムは一度に 1 文字ずつメッセージをスキャンし、スキャンされた文字が単語CCCCに入るまで、またはメッセージの終わりに到達
するまで、各文字がスタックにプッシュされます。 スキャンした文字がCCCCの文字の 1 つである場合、その文字を出力し、スタックが空になるか、スタックの一番上の文字が CCCC の文字の 1 つになるまで、スタックの一番上にある文字の出力とポップを続けます。XXXX
. メッセージの終わりに到達したら、スタックの一番上に文字を出力し、スタックが空になるまで、スタックの一番上からポップして出力し続けます。
ここにヒントがあります: " GOOD " " LUCK "、それは " SOUNDS SIMPLE TO ME "、またはあなたのプログラムが言うように: " 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 」が最終出力に表示されるので、正しい道を進んでいることがわかります。コードを調べます。