为啥我不能从字符堆栈中弹出元素?

Posted

技术标签:

【中文标题】为啥我不能从字符堆栈中弹出元素?【英文标题】:why I can not pop elements from character stack?为什么我不能从字符堆栈中弹出元素? 【发布时间】:2022-01-21 11:11:57 【问题描述】:

我正在使用 C++ 中的字符数组编写堆栈示例。 运行程序时,它显示 3 个选项。第 1 用于推送,第 2 用于弹出,第 3 用于输出。 我不知道当我将字符推入字符串时,我无法弹出最高值。

#include <iostream>
int top = -1;
char stack[10];
int n = 10;
using namespace std;
char push()

    string a;

    if (top == n - 1) 
        cout << "stack is full" << endl
             << endl;
    
    else
        cout << "enter value to push" << endl;
    cin >> a;
    // loop
    for (int i = 0; i < a.length(); i++) 
        stack[top] = a[i];
        top = top + 1;
    
    for (int i = top; i >= -1; i--) 
        cout << "  " << stack[i] << endl;
    
    return top;

char pop()

    char x;
    //  int l;
    //  cin>>l;
    if (top < 0) 
        cout << "stack is empty" << endl;
        return 0;
    
    else
        for (int i = n; i > -1; i--) 

            stack[top] = x;
            --top;
        


int main()

    int choose;

    do 
        cout << endl;
        cout << "choose your option" << endl;
        cout << "1 for push" << endl;
        cout << "2 for pop" << endl;
        cout << "3 for print" << endl;
        cout << "-1 for exit" << endl;
        cin >> choose;
        switch (choose) 
        case (1): 
            push();
            break;
        
        case (2): 

            pop();
         break;
        case (3): 
            if (top >= 0) 
                cout << "All values in the Stack are " << endl;
                for (int i = top; i >= -1; i--) 

                    cout << stack[i] << endl;
                
            

         break;
        
     while (choose != -1);
    return 0;

我不知道为什么我不能从字符堆栈中弹出元素。 我正在尝试,但我无法弄清楚我的代码有什么问题。一点帮助将不胜感激。

【问题讨论】:

pop 既不是弹出(它根据不完整的比较将某些内容分配给顶部)也不是返回值。我很惊讶您没有收到最后一个编译器警告,或者是吗? (您应该始终修复所有编译器警告,而不仅仅是错误)。总而言之,您的代码仍然很乱,甚至可能无法编译 if ( l == ) 应该被编译器拒绝。 for (int i = top; i &gt;= -1; i--) 表示 -1 将用于索引数组。在循环中执行top = top+1; (++top) 而不测试每次迭代是否溢出是错误的。 第一次运行时:stack[top]=a[i]; is not top 等于 -1? 【参考方案1】:
else

    char s[10];
    stack[top] = s[top];
    top = top - 1;

这个pop方法可以在你的代码中一一弹出。

但我不知道你为什么在-1索引处写入和擦除值。

而且没有错误的事实更令人惊讶。

【讨论】:

【参考方案2】:
#include <iostream>
int top = -1;
char stack[10];
int n = 10;
using namespace std;
int push()

    string a;

    if (top == n - 1)
    
        cout << "stack is full" << endl
            << endl;
        return 0;
    
    else
    
        cout << "enter value to push" << endl;
        cin >> a;
    

    for (int i = 0; i < a.length(); i++)
    
        top = top + 1;
        stack[top] = a[i];
    
    for (int i = top; i >= -1; i--)
    
        cout << "  " << stack[i] << endl;
    
    return 0;

int pop()

    if (top < 0)
    
        cout << "stack is empty" << endl;
        return 0;
    
    else
        --top;
    return 0;


int main()

    int choose;

    do
    
        cout << endl;
        cout << "choose your option" << endl;
        cout << "1 for push" << endl;
        cout << "2 for pop" << endl;
        cout << "3 for print" << endl;
        cout << "-1 for exit" << endl;
        cin >> choose;
        switch (choose)
        
        case (1):
        
            push();
            break;
        
        case (2):
        

            pop();
        
        break;
        case (3):
        
            if (top >= 0)
            
                cout << "All values in the Stack are " << endl;
                for (int i = top; i > -1; i--)
                

                    cout << stack[i] << endl;
                
            
        
        break;
        
     while (choose != -1);
    return 0;

您不想替换字符以删除字符 如果你想使用删除操作符

对于这个弹出操作,只需减少顶部值

我将顶部增量放在赋值之前,这样可以防止将值放在 -1 索引中

【讨论】:

以上是关于为啥我不能从字符堆栈中弹出元素?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从导航堆栈中弹出视图时键盘不显示?

如何使用堆栈和队列非递归地生成所有可能的n元素集子集?

从导航堆栈中弹出视图控制器时从右侧滑入

从 .NET 的 Stack<T> 类中弹出项目会减少内存使用量?

从列表中弹出随机元素的最pythonic方法是啥?

有没有办法找出视图控制器是不是从导航堆栈中弹出?