ff14切换快捷栏的宏:这个程序运行“找错的地方"一直是“{”,请教怎么改动程序使得括号匹配成功且报错在哪儿也成功

来源:百度文库 编辑:高校问答 时间:2024/04/29 12:34:11
#include <iostream>
#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
char ch;
char str[2000];
int i;
stack<int> st;
st.push(0);
cout<<"Please put an expression:"<<endl;
cin>>str;
for(i=0;i<2000;i++)
{
ch=str[i];
bool match=true;
if(ch=='{'||ch=='('||ch=='[')
switch(ch)
{
case'{':st.push(1);break;
case'(':st.push(2);break;
case'[':st.push(3);break;
}
if(ch=='}'||ch==')'||ch==']')
if(st.top()==0){
cout<<"Unmatched closing bracket"<<ch<<"detected."<<endl;
match=false;
}
else{
int m;
switch(ch)
{
case'}':m=st.top();st.pop();break;
case')':m=st.top();st.pop();break;
case']':m=st.top();st.pop();break;
}
match=(m==1&&ch=='}')
||(m==2&&ch==')')
||(m==3&&ch==']');
if(!match)
cout<<"Bad match "<<ch<<endl;
}}

if(st.top()!=0){
cout<<"Unmatched opening bracket(s) detected."<<endl;
}
else cout << "Correct!"<< endl;
system("pause");
}

你为什么要循环2000次呢?可以在str的后面的会包含你设定的关键字,所以这样可能会出错哦!你就循环字符串的长度那么多次就可以了嘛!把那一段稍微改一下!

cin>>str;
int strlength=strlen(str);//只要循环到字符串长度就可以了
for(i=0;i<strlength;i++)

match=(m==1&&ch=='}') '}'改为'\}'
||(m==2&&ch==')') '同上
||(m==3&&ch==']');
if(!match)
cout<<"Bad match "<<ch<<endl;
}} '去掉这里的一个大扩号.

反正见到所有}、{、(、)此类的都在前加上 \

原因:主函数没有返回值

可以将主函数返回值改为void(不提倡)
也可以在最后加一句:return 0;