weixin_39115868 2018-04-07 06:41 采纳率: 33.3%
浏览 1287
已结题

代码没有问题,运行时却出错,为什么会这样呢

#include
#include
#include
using namespace std;
#define MAXSIZE 100

typedef struct {
char data[MAXSIZE];
int top;
}stack;

//初始化栈
void Initstack(stack *s){
s->top = -1; //将栈的栈顶指针置为-1,表示栈为空
printf("栈初始化成功\n");
}

//进栈函数
int push(stack *s,char x){
if(s->top >= MAXSIZE - 1){
printf("栈满,无法进栈\n");
return 0; //栈满,上溢
}
else{
s->top++;
s->data[s->top] = x;
printf("已经进栈\n");
return 1;
}
}

//出栈算法
int pop(stack *s,char e){
if(s->top < 0){
printf("栈中已空,无元素可出栈\n");
return 0; //栈空,下溢
}
else{
e = s->data[s->top];
s->top--;
printf("已经出栈\n");
return 1;
}
}

//取栈顶元素算法
char GetTop(stack *s,char e){
if(s->top < 0){
printf("栈为空,无元素可取\n");
return 0; //栈空,没有元素可取
}
else{
printf("将栈顶元素取到e中\n");
e = s->data[s->top];
return e;
}
}

//判断栈空算法
int empty(stack *s){
if(s->top < 0){
printf("栈为空\n");
return 1; //栈空,返回值为1和栈为空
}
else{
printf("栈不为空\n");
return 0; //栈不是空的
}
}

int matching(char *exp,stack *s,int i){
int k = 0,state = 1;
char e;
while (k < i) {
switch (exp[k]){
case '(':{
push(s,exp[k]); k++;
break;
}
case ')': {
if(empty(s) == 0){
if(GetTop(s,e) == '('){
pop(s,e);
k++;
}
else{
printf("与前一个元素不匹配\n");
state = 0;
}
}
else{
state = 0;
}
break;
}
case '[':{
push(s,exp[k]);k++;
break;
}
case ']':{
if(empty(s) == 0){
if(GetTop(s,e) == '['){
pop(s,e);
k++;
}
else{
printf("与前一个元素不匹配\n");
state = 0;
}
}
else{
state = 0;
}
break;
}
case '{':{
push(s,exp[k]);k++;
break;
}
case '}':{
if(empty(s) == 0){
if(GetTop(s,e) == '{'){
pop(s,e);
k++;
}
else{
printf("与前一个元素不匹配\n");
state = 0;
}
}
else{
state = 0;
}
break;
}
default:{
return 2;
}
}
if(state == 0){
return 0;
}
}
return 1;
}

int main(){
char str[100];
stack *sqstack;
int i = 0;
printf("请输入一组要验证的括号\n");
scanf("%s",str);
for(i = 0;str[i] != '\0';i++){
}
printf("%d\n",i);
Initstack(sqstack); //初始化栈
int x = matching(str,sqstack,i);
if(x == 1){
printf("括号匹配\n");
}
else if(x == 0){
printf("括号不匹配\n");
}
else{
printf("输入内容不是括号\n");
}

return 0;
}

  • 写回答

3条回答 默认 最新

  • 默陌叶 2018-04-08 01:53
    关注

    逻辑挺清晰,看起来没问题,可以考虑编码的问题。可能c++文件用的utf8编码,输入的字符用的gbk之类的,导致判断字条相等出错。这是一个思路,仅供参考。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能