无法获得已填充堆栈的顶部元素<char>

时间:2019-11-19 04:17:34

标签: c++ stack

我坚持使用堆栈)在这段代码中,我没有填充几个堆栈,后来尝试从中获取日期。但是在使用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();

但是我仍然不知道为什么...

1 个答案:

答案 0 :(得分:1)

您似乎使用了错误的变量,在测试opersnums的同时

while (!opers.empty() && !nums.empty()){

在循环中使用operatorsnumbers

    op = operators.top();//Problem over there
    operators.pop(); 
    num = numbers.top();
    numbers.pop();

请参阅工作示例here