我坚持使用堆栈)在这段代码中,我没有填充几个堆栈,后来尝试从中获取日期。但是在使用char堆栈时,出现了一个问题错误。
标头中声明的堆栈
stack<int> numbers;
stack<char> operators;
输入法
void Notation::InptWriter() {
notationPtr = new char[SIZE];
cout << "Enter expression: ";
cin.getline(notationPtr, SIZE);
}
这种填充堆栈的方法(1表示整数,1表示char)
void Notation::Convert(char *ptr, int *store) {
int x = 0;
static string y = "";
for (int i = 0; i < strlen(ptr); i++) {
if (isdigit(*(ptr + i))) { //for numbers greater that 9
y += *(ptr + i);
} else { // if inline char isNaN push char to Operator stack, then convert 'y' to int and push to number stack
operators.push(*(ptr + i));//push value to the stack
if (y != "") {
x = stoi(y);
numbers.push(x);
y = "";
}
}
if (!operators.empty()) {
cout << "op: " << operators.top();
}
if (!numbers.empty()) {
cout << "__Num: " << numbers.top();
}
cout << "----" << *(ptr + i) << "---" << y << endl;
}
}
在这里,我尝试使用堆栈中的相同数据类型来初始化变量,并在运行时出现错误
void Notation::StackWorking(stack<int> nums, stack<char> opers) {
char op;
int num;
cout<<operators.top()<<" "<<numbers.top();
while (!opers.empty() && !nums.empty()){
cout<<"in";
op = operators.top();//Problem over there
operators.pop();
num = numbers.top();
numbers.pop();
cout << op << " " << num << endl;
}
谢谢!
我赞扬了我在堆栈顶部的那一行,一切开始正常工作...
if (!operators.empty()) {
// cout << "op: " << operators.top();
}
if (!numbers.empty()) {
// cout << "__Num: " << numbers.top();
但是我仍然不知道为什么...
答案 0 :(得分:1)
您似乎使用了错误的变量,在测试opers
和nums
的同时
while (!opers.empty() && !nums.empty()){
在循环中使用operators
和numbers
op = operators.top();//Problem over there
operators.pop();
num = numbers.top();
numbers.pop();
请参阅工作示例here