为什么后面缺少输出呢

为什么后面的5个H没有输出呢
大家可以帮忙看一下吗
这是王道书里的,简单来说就是用栈把S放到前面,H放到后面

img

img

img

pop函数中,应该是是 x= s.data[s.xtop--];
修改后运行结果:

img

完整代码如下(修改部分有注释):

#include <iostream>
using namespace std;
#define Max 120
typedef struct {
    char data[Max];
    int top;
}stack;

bool push(stack& s, char x)
{
    if (s.top == Max - 1)
        return false;
    s.data[++s.top] = x;
    return true;
}

bool pop(stack& s, char& x)
{
    if (s.top == -1)
        return false;
    //修改 这里应该是给x赋值
    x = s.data[s.top];
    s.top--;
    return true;
}
bool stackempty(stack s)
{
    if (s.top == -1)
        return true;
    else
        return false;
}

void arrange(char a[])
{
    stack s;
    s.top = -1;
    char* p = a, * q = a, c;
    while (*p)
    {
        if (*p == 'H')
            push(s, *p);
        else
        {
            *q = *p;
            cout << *q;
            q++;
        }
        p++;
    }
    while (!stackempty(s))
    {
        pop(s,c);
        //*q = c; //修改 这一句没必要,直接输出c就可以了
        cout << c;
    }
}

int main()
{
    char a[] = "HSHSHHSSSH";
    cout << a << endl;
    arrange(a);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632