-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 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程