题目:
请编写程序检查C语言源程序中下列符号是否配对:/*
与*/
、(
与)
、[
与]
、{
与}
。
输入格式:
输入为一个C语言源程序。当读到某一行中只有一个句点.
和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。
输出格式:
首先,如果所有符号配对正确,则在第一行中输出YES
,否则输出NO
。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号
;如果缺少右符号,则输出左符号-?
。
输入样例1:
void test()
{
int i, A[10];
for (i=0; i<10; i++) { /*/
A[i] = i;
}
.
输出样例1:
NO
/*-?
答案:
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<char> C;
string ss="",s1;
while(true)
{
getline(cin,s1);
if(s1==".")
{
break;
}
else
for(int i=0; i<s1.length(); i++)
{
s1[i];
if(s1[i]=='{'||s1[i]=='['||s1[i]=='('||s1[i]==']'||s1[i]=='}'||s1[i]==')')
{
ss=ss+s1[i];
}
else if(s1[i]=='/'&&s1[i+1]=='*')
{
ss+='<';
i++;
}
else if(s1[i]=='*'&&s1[i+1]=='/')
{
i++;
ss+='>';
}
}
}
for(int i=0; i<ss.length(); i++)
{
if(ss[i]=='('||ss[i]=='['||ss[i]=='{'||ss[i]=='<')
{
C.push(ss[i]);
}
else if(C.empty())
{
if(ss[i]=='>')
{
cout<<"NO"<<endl;
cout<<"?-*/"<<endl;
}
else
{
cout<<"NO"<<endl;
cout<<"?-"<<ss[i]<<endl;
}
return 0;
}
else if(C.top()=='(')
{
if(ss[i]==')')
{
C.pop();
}
else
{
cout<<"NO"<<endl;
cout<<C.top()<<"-?"<<endl;
return 0;
}
}
else if(C.top()=='[')
{
if(ss[i]==']')
{
C.pop();
}
else
{
cout<<"NO"<<endl;
cout<<C.top()<<"-?"<<endl;
return 0;
}
}
else if(C.top()=='{')
{
if(ss[i]=='}')
{
C.pop();
}
else
{
cout<<"NO"<<endl;
cout<<C.top()<<"-?"<<endl;
return 0;
}
}
else if(C.top()=='<')
{
if(ss[i]=='>')
{
C.pop();
}
else
{
cout<<"NO"<<endl;
cout<<"/*-?"<<endl;
return 0;
}
}
}
if(!C.empty())
{
if(C.top()=='<')
{
cout<<"NO"<<endl;
cout<<"/*-?"<<endl;
}
else
{
cout<<"NO"<<endl;
cout<<C.top()<<"-?"<<endl;
}
}
else
{
cout<<"YES"<<endl;
}
return 0;
}