括号的匹配(简单)
来源:互联网 发布:软件杂志社官网 编辑:程序博客网 时间:2024/06/05 00:48
括号的匹配
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 7 Accepted Submission(s) : 5
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
假设一个表达式由英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。假设表达式长度小于255,左圆括号小于20个。
Input
输入有多组测试数据,每组为一个表达式。
Output
对于每组表达式如果匹配输出“YES”,否则输出“NO”。
Sample Input
2*(x+y)/(1-x)@
Sample Output
YES
提供两组算法
1://逐个字符判断 统计两种括号的个数 如果相等 则输出yes
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main ()
{ string s;
int c1,c2,i,len;
while(cin>>s)
{ c1=c2=0;
len=s.length();
for(i=0;i<len;i++)
{
if(s[i]=='(') c1++;
else if(s[i]==')') c2++;
//else i++;
}
if(c1==c2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
#include <stdio.h>
#include <string>
using namespace std;
int main ()
{ string s;
int c1,c2,i,len;
while(cin>>s)
{ c1=c2=0;
len=s.length();
for(i=0;i<len;i++)
{
if(s[i]=='(') c1++;
else if(s[i]==')') c2++;
//else i++;
}
if(c1==c2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
2.利用栈
#include <iostream>
#include <string>
#include <string.h>
#include <cstdio>
using namespace std;
struct sstack
{
char sign[10010];
int top;
};
void initstack(sstack &s)//将栈顶置空
{
s.top=-1;
}
bool isemptystack(sstack &s)// 判断栈是否为空
{
return s.top==-1?1:0;
}
int pushstack(sstack &s,char c)//将元素压栈
{
s.sign[++s.top]=c;
return 1;
}
int popstack(sstack &s)//将元素弹出栈
{
if(isemptystack(s))
return 0;
s.top--;
return 1;
}
char topstack(sstack &s)//弹出栈顶元素
{
if(isemptystack(s))
return 0;
return s.sign[s.top];
}
int main ()
{
char str[270];
sstack s;
int i,len;
bool flag;
while(scanf("%s",str)!=EOF)
{
flag=1;
len=strlen(str);
initstack(s);
for(i=0; i<len; i++)
{
if(str[i]=='(')
{
pushstack(s,str[i]);
}
else if(str[i]==')')
{
if(isemptystack(s)||topstack(s)!='(') flag=0;
else popstack(s);
}
}
if(!isemptystack(s)) //如果此时栈里面还有元素则不匹配
flag=0;
// cout<<flag<<endl;
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
#include <string>
#include <string.h>
#include <cstdio>
using namespace std;
struct sstack
{
char sign[10010];
int top;
};
void initstack(sstack &s)//将栈顶置空
{
s.top=-1;
}
bool isemptystack(sstack &s)// 判断栈是否为空
{
return s.top==-1?1:0;
}
int pushstack(sstack &s,char c)//将元素压栈
{
s.sign[++s.top]=c;
return 1;
}
int popstack(sstack &s)//将元素弹出栈
{
if(isemptystack(s))
return 0;
s.top--;
return 1;
}
char topstack(sstack &s)//弹出栈顶元素
{
if(isemptystack(s))
return 0;
return s.sign[s.top];
}
int main ()
{
char str[270];
sstack s;
int i,len;
bool flag;
while(scanf("%s",str)!=EOF)
{
flag=1;
len=strlen(str);
initstack(s);
for(i=0; i<len; i++)
{
if(str[i]=='(')
{
pushstack(s,str[i]);
}
else if(str[i]==')')
{
if(isemptystack(s)||topstack(s)!='(') flag=0;
else popstack(s);
}
}
if(!isemptystack(s)) //如果此时栈里面还有元素则不匹配
flag=0;
// cout<<flag<<endl;
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
- 括号的匹配(简单)
- 简单的括号匹配
- 简单的括号匹配
- 简单的括号匹配算法
- 简单的括号匹配问题
- 一个简单的括号匹配问题
- 基于栈的简单括号匹配
- java--一道简单的括号匹配问题
- 栈学习--简单的括号匹配
- poj1068 简单的括号匹配模拟
- 简单栈的应用之括号匹配
- (java)括号匹配(简单)
- 简单括号匹配code
- 简单括号匹配
- 简单的括号匹配问题,只有 ( 和 )。。。其实原理就是开栈最后的状态。。。
- 栈的简单应用(数制转换、括号匹配检验、行编辑、迷宫求解)
- COJ 1065括号匹配:栈的简单应用
- 括号匹配(一) 栈的应用
- 在ubuntu12.04上用qvfb运行QtE程序
- win7wifi共享
- 各种java中文乱码及解决方案
- 五只猴子分桃
- Software
- 括号的匹配(简单)
- 去掉Eclipse RCP中的多余默认按钮
- UVA 662 Fast Food(dp)
- BNU4210
- disruptor学习笔记
- 将Request.QueryString获得的值转换为INT
- 根据数据库表名获取列名
- 新浪微博API Oauth2.0 认证。。。
- 解析XML文件的具体案例