uva 673括号匹配问题

注意:空行要输出Yes,要用gets读函数,这道题让我学会了gets和scanf函数除了空格问题之外还是

有区别的,scanf把空格,Tab, 回车都视为结束标志,不会读入他们,后面自动加‘\0‘,所以空格,回车,Tab

都在缓冲区,可以用getchar()读取到,但是gets()函数虽然也将回车视为结束标志,但是他们会将回车读

入,读到字符串里是‘\0‘,所以,他们就不会存在缓冲区里,也就是说用getchar()读取不到他们了。。。

放代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stack>
using namespace std;
char a[130];
int main()
{
	stack <char> s;
	int n,flag,i;
	char ch;
	scanf("%d",&n);
	getchar();
	while(n--)
	{
		flag=1;
		gets(a);
	//	scanf("%s",a);
		if(a[0]=='\0')
			{
				puts("Yes");
				continue;
			}
		flag=0;
		int len = strlen(a);
		for(i=0; i<len; i++)
		{
			if(a[i]=='('||a[i]=='[')
			{
				s.push(a[i]);
			}
			else
			{
				if(s.empty())
				{
						puts("No");
						flag=1;
						break;
				}
				else
				{
					ch = s.top();
					s.pop();
					if(a[i]==')')
					{
						if(ch!='(')
						{
							puts("No");
							flag=1;
							break;
						}
					}
					else
					{
						if(ch!='[')
						{
							puts("No");
							flag=1;
							break;
						}
					}
				}
			}
		}
		if(!flag)
		{
		   if(s.empty())
			puts("Yes");
		   else
			puts("No");
	    }
	    while(!s.empty())
	    {
	    	s.pop();
	    }

	}
} 
时间: 2024-08-05 03:04:15

uva 673括号匹配问题的相关文章

UVA 673(括号匹配)

本地单文件上传脚本,命名uf 这是在本机上做的测试,利用bpcs_uploader脚本实现,只是进行简单的封装,自动完善云端文件路径. 技术要点:使用dirname获取文件所在目录,使用pwd获取文件完整路径,并作为云端文件路径. #!/bin/bash cur_dir=$(cd "$(dirname "$1")"; pwd) name=$(basename "$1") /home/grm/bin/bpcs_uploader/bpcs_uploa

UVa 673 括号平衡

思路:简单的匹配操作,利用栈. Code: #include<stdio.h> #include<string.h> char stack[135]; int main() { int n; scanf("%d",&n); getchar(); while(n-->0) { memset(stack,0,sizeof(stack)); char c; int top=0; int flag=1; while((c=getchar())!='\n')

UVa 673 (括号配对) Parentheses Balance

本来是当做水题来做的,后来发现这道题略坑. 首先输入的字符串可能是空串,所以我用了gets函数,紧接着就被scanf("%d", &n)后面的换行符坑掉了. 于是乎再加一句getchar() 1 #include <cstdio> 2 #include <stack> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 150; 7 char s[maxn]; 8

UVA - 673 - Parentheses Balance (栈的应用!)

UVA - 673 Parentheses Balance Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Parentheses Balance  You are given a string consisting of parentheses () and []. A string of this type is said to be co

nyoj 括号匹配

这个方程有两种形式,本文采用 if(s[i]=s[j]) dp[i][j]=d[i-1][j-1] dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]) (i=<k<j) 其实与另一种方法比较:根据j的所有匹配情况取最小值 1.i到j无匹配,取为dp[i][j-1]+1 2.列举所有匹配情况 dp[i][k-1]+dp[k+1][j] 取上述所有情况最小值 两者都能获得正确的结果. 同时两者的初始化为 dp[i][j]==1 if(i==j) 规划方向为:  

括号匹配问题(顺序栈实现)

本周老师作业留了两个.先上传一个吧.那个有时间我再传上来~ 本周的要求: 1.给出顺序栈的存储结构定义. 2.完成顺序栈的基本操作函数. 1)      初始化顺序栈 2)      实现入栈和出栈操作 3)      实现取栈顶元素和判空操作 括号匹配问题 3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果. 4.程序调试运行并保存输出结果. 5.整理并提交实验作业. 1 #include <cstdio> 2 #include <cstring>

堆栈_括号匹配

class Solution { public: bool isValid(string s) { if(s.empty()) return false; stack<int> s1; int n=s.size(); for(int i=0;i<n;i++) { if(s[i]=='('||s[i]=='['||s[i]=='{') s1.push(s[i]); else if(s1.empty()) return false; else if((s[i]==')'&&s

括号匹配(二)

括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来.如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的 输入 第一行输入一个正整数N,表示测试数据组数(N<=10)每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不

动态规划(2)--括号匹配(二)

括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来.如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的 输入 第一行输入一个正整数N,表示测试数据组数(N<=10)每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超