-tthappy 2023-03-19 11:53 采纳率: 55.6%
浏览 22
已结题

求解答,为何栈疑似被赋值成功却显示为空。

我想把字符串a前半部分的字符串,赋值给栈,比如a的字符串为abba,然后栈S就存 ab,再把栈S取栈顶元素 赋给字符串数组b,b数组就有ba、为啥没有成功??求指出,目前显示的问题应该是我甚至都没有给栈成功复制。栈还是空的!

这是运行结果:

img

其实是要写一个回文串的判断,我卡在前面了,还没开始写回文串判断的算法嘞,但是我看运行结果,字符串b有被赋值,但是为什么 会显示出:S is empty?以及秉??求告诉我,以下是代码:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define OVERFLOW -1
#define ERROW 0
#define MAXSIZE 10 //最大元素个数 

typedef struct //储存结构 
{char *base;
char *top;
int stacksize;
}Stack;

int InitStack(Stack &S)  //初始化 
{S.base=new char[MAXSIZE];
if (!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK; 
}

int isEmpty(Stack &S)  //判断是否为空 
{if(S.top==S.base) return OK;
else return ERROW;
}

int isFull(Stack &S) //判断是否满 
{if(S.top-S.base==MAXSIZE)
return OK;
else return ERROW;
}

int insert(Stack &S,char i)
{if(isFull(S)) return ERROW;
*(S.top++)=i;
return OK;
}

void outStack(Stack &S,char *p,int len)
{if(isEmpty) printf("S is empty\n"); 
for(int i=0;i<len;i++)
{*(p++)=*(--S.top);}}
int main()
{char a[10];
int i;

char *p;
int lenth,len;
printf("请输入字符串\n");
scanf("%s",a);
Stack S;
InitStack (S);
lenth=strlen(a);
p=a;
len=lenth/2;
for(i=0;i<len;i++)
{insert(S,*(p++));
}
char b[len];
p=b;
outStack (S,p,len);

printf("%s",b);

 return 0;
}

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2023-03-19 12:44
    关注

    if(isEmpty)改为 if(isEmpty(S))
    isEmpty是函数名,肯定不是0啊,所以if(isEmpty)是成立的,自然输出S is empty了。而实际你是要判断S是否为空,是函数调用
    char b[len+1] = {0}; 数组长度要加1,并且要初始化。不然%s输出时,缺少字符串结束符,就出现乱码了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析