是浩浩子 2021-11-11 11:33 采纳率: 50%
浏览 21
已结题

【help】字符串A[i]!='\0作为循环标志,循环次数不如所料

写了一个括号匹配的算法,但最后输出的结果不如所料,找了好久也不知道问题出在哪里,最终测试可能是循环次数的问题。具体描述在下面代码里。


#include<iostream>
using namespace std;
#define maxSize 100

//建立一个字符栈
struct cStack
{
    char data[maxSize];
    int top;
};
//初始化栈函数
cStack initchs(cStack s)
{
    //cstack s;
    s.top=-1;
    return s;
}
//入栈函数
cStack push(cStack s,char c)
{
    if(s.top==maxSize)
    {
        cout<<"栈满,入栈失败!"<<endl;
        return s;
    }
    else
    {
        s.data[++s.top]=c;
        return s;
    }
    
}
//出栈函数
cStack pop(cStack s)
{
    if(s.top<0)
    {
        cout<<"栈空,出栈失败!"<<endl;
        return s;
    }
    else
    {
        s.top--;
        return s;
    }
       
}
bool test06()
{
    //初始化栈
    cStack s;
    s=initchs(s);
    //cout<<s.top<<endl;//-1
    int i=0;
    char A[]={'{','{','[','(',')',']','}','}'};
    /*while(A[i]!='\0')//测试能否正常输出
    {
        cout<<A[i]<<",";
        i++;
    }*/
    while(A[i]!='\0')
    {
        switch(A[i])
        {
            case '{':  s=push(s,'{');break;
            case '[':  s=push(s,'[');break;
            case '(':  s=push(s,'(');break;
            case '}':
                    if(s.data[s.top]!='{')
                        {
                            cout<<"不匹配1!"<<endl;
                            return false;
                        }
                        s=pop(s);
                    break;
            case ']':
                    if(s.data[s.top]!='[')
                        {
                            cout<<"不匹配2!"<<endl;
                            return false;
                        }
                        s=pop(s);
                    break;
            case ')':
                    if(s.data[s.top]!='(')//if(s.data[s.top]!=')')
                    {
                        cout<<"不匹配3!"<<endl;
                        return false;
                    }
                        s=pop(s);    
                    break;
            default:
                break;
        }//switch
        i++;
        
        if(s.top==-1)
        {
            cout<<"匹配成功!"<<endl;
        }
            cout<<s.top<<endl;//0,1,2,3,2,1,0,匹配成功!-1,0,1,2,3
    }//while
//当跳出while循环后,i的值为i=12,相当于循环了12次吗?但字符数组里只有8个字符,这是为什么呢?
    cout<<"i="<<i<<endl;
    cout<<"A[i]="<<A[i]<<endl;
    if(s.top<0)
    {
        cout<<"匹配成功!"<<endl;
        return true;
    } 
    else
    {
        cout<<"匹配不成功!"<<endl;
        cout<<s.top<<endl;//3
        return false;
    }
        
}
int main()
{
    test06();
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 从善若水 5G/6G通信领域优质创作者 2021-11-11 11:56
    关注

    char A[]={'{','{','[','(',')',']','}','}','\0'};

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大