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之类的,导致判断字条相等出错。这是一个思路,仅供参考。

    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制