测试点5:左右符号个数相同,达到最大值,但不匹配。
若测试点5不过,可尝试:
/**/*/
.
此测试样例输出为:
?-*/
请编写程序检查C语言源程序中下列符号是否配对:
/*
与*/
、(
与)
、[
与]
、{
与}
。输入格式:
输入为一个C语言源程序。当读到某一行中只有一个句点
.
和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。输出格式:
首先,如果所有符号配对正确,则在第一行中输出
YES
,否则输出NO
。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号
;如果缺少右符号,则输出左符号-?
。输入样例1:
void test() { int i, A[10]; for (i=0; i<10; i++) { /*/ A[i] = i; } .
输出样例1:
NO /*-?
输入样例2:
void test() { int i, A[10]; for (i=0; i<10; i++) /**/ A[i] = i; }] .
输出样例2:
NO ?-]
输入样例3:
void test() { int i double A[10]; for (i=0; i<10; i++) /**/ A[i] = 0.1*i; } .
输出样例3:
YES
另附代码:
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
stack<string>s1;
while(1)
{
string s;getline(cin,s);
if(s==".")break;
for(int i=0;i<s.size();i++)
{
if(s[i]=='/'&&s[i+1]=='*')
{
s1.push("/*");i++;continue;
}
if(i+1<=s.size()&&s[i]=='*'&&s[i+1]=='/')
{
if(s1.size()!=0&&s1.top()=="/*")
{
s1.pop();i++;continue;
}
else if(s1.size()==0||s1.top()!="/*")
{
if(s1.size()!=0)
{
cout<<"NO"<<endl;
cout<<s1.top()<<"-?";return 0;
}
else
{
cout<<"NO"<<endl;
cout<<"?-"<<"*/";
return 0;
}
}
}
if(s[i]=='(')
{
s1.push("(");
}
if(s[i]==')')
{
if(s1.size()!=0&&s1.top()=="(")s1.pop();
else if(s1.size()==0||s1.top()!="(")
{
if(s1.size()!=0)
{
cout<<"NO"<<endl;
cout<<s1.top()<<"-?";return 0;
}
else
{
cout<<"NO"<<endl;
cout<<"?-"<<")";
return 0;
}
}
}
if(s[i]=='[')
{
s1.push("[");
}
if(s[i]==']')
{
if(s1.size()!=0&&s1.top()=="[")s1.pop();
else if(s1.size()==0||s1.top()!="[")
{
if(s1.size()!=0)
{
cout<<"NO"<<endl;
cout<<s1.top()<<"-?";return 0;
}
else
{
cout<<"NO"<<endl;
cout<<"?-"<<"]";
return 0;
}
}
}
if(s[i]=='{')
{
s1.push("{");
}
if(s[i]=='}')
{
if(s1.size()!=0&&s1.top()=="{")s1.pop();
else if(s1.size()==0||s1.top()!="{")
{
if(s1.size()!=0)
{
cout<<"NO"<<endl;
cout<<s1.top()<<"-?";return 0;
}
else
{
cout<<"NO"<<endl;
cout<<"?-"<<"}";
return 0;
}
}
}
}
}
if(s1.size()==0)
{
cout<<"YES"<<endl;return 0;
}
if(s1.size()!=0)
{
cout<<"NO"<<endl;
cout<<s1.top()<<"-?";
}
}