Tôi đã nhận được bài tập cho lớp C++ của mình tuần trước. Tôi nghĩ một số bạn sẽ thấy nó thú vị! Tôi quản lý để có được hầu hết các mã xuống nhưng tôi bị mắc kẹt và không thể con số này ra cho cuộc sống của tôi ... Dưới đây là những hướng dẫn cho quá trình mã hóa tôi phải đưa vào mã:Mã hóa một chuỗi có ngăn xếp
Thông điệp gửi nhập từ bốn chữ cái, CCCC và một chữ cái khác gồm bốn chữ cái, XXXX.
Người gửi thư sau đó nhập thông điệp được mã hóa.
Chương trình quét thư một lần một lần và mỗi ký tự được đẩy vào ngăn xếp cho đến khi hoặc ký tự được quét có trong từ CCCC hoặc kết thúc thư là gặp phải.
Khi nhân vật quét là một trong những ký tự ở CCCC, in ấn mà char và tiếp tục in và bật các ký tự ở phía trên cùng của ngăn xếp cho đến khi một trong hai ngăn xếp rỗng hoặc char ở phía trên cùng của ngăn xếp là một trong các ký tự trong XXXX. Khi kết thúc thông báo gặp phải, hãy in ký tự ở đầu ngăn xếp và tiếp tục bật và in từ đầu ngăn xếp cho đến khi ngăn xếp trống.
Dưới đây là một gợi ý: "TỐT" "LUCK", nó "âm thanh đơn giản TO ME", hoặc như chương trình của bạn sẽ nói: "OSDNOT EEM LPMIS SU"
Vì vậy, đó là nhiệm vụ thực tế.
Những gì tôi đang gặp rắc rối với là bit cuối cùng:
Khi kết thúc thông điệp đang gặp phải, in các nhân vật ở phía trên cùng của ngăn xếp và tiếp tục bật và in từ trên xuống của ngăn xếp cho đến khi ngăn xếp trống.
tại đây là đoạn code tôi có cho đến nay:
#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;
}
Khi biên soạn, sản lượng thức mang lại cho tôi "OSDNOT", đó là trong ví dụ được cung cấp bởi giáo sư của tôi, vì vậy tôi biết tôi đang đi đúng hướng .. Bất kỳ sự trợ giúp nào cũng tuyệt vời, tôi thậm chí không biết bắt đầu kiểm tra mã ở đâu.
Kiểm tra lại các khai báo của bạn cho 'word1' và' word2'. – sblom
Tôi sẽ không đọc hết mã này vì nó trễ và tôi mệt, nhưng những gì tôi làm cho tất cả các bài tập về Khoa học Máy tính phức tạp của mình là: đảm bảo rằng bạn đang in tất cả các giá trị biến đang thay đổi ở mọi bước. Bằng cách đó bạn có thể thấy được vấn đề nằm ở đâu. –
@sblom hmm tại sao bạn lại nói vậy? Có vẻ ổn với tôi – rcorrie