经典c程序(0027)一括号匹配


  1     /**************************************************************************************
2 * Function : 括号匹配
3 * Create Date : 2014/05/16
4 * Author : NTSK13
5 * Email : [email protected]
6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
7 * 任何单位和个人不经本人允许不得用于商业用途
8 * Version : V0.1
9
10 题目: 经典c程序(0027)一括号匹配
11 现在,有一行括号序列,请你检查这行括号是否配对。
12 输入 :
13 第一行输入一个数N(0<N<=100),表示有N组测试数据。
14 后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),
15 测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
16
17 输出 :
18 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
19
20 样例输入 :
21 3
22 [(])
23 (])
24 ([[]()])
25 样例输出 :
26 No
27 No
28 Yes
29 **************************************************************************************/
30 #include<stdio.h>
31
32 // 测试数据可自由修改
33 #define COUNT 5
34 #define LENGTH 50
35
36 static char brackets_array[COUNT][LENGTH] =
37 {
38 "[(])",
39 "(])",
40 "([[]()])",
41 "([[](((()[])))[[()]]](([[()]])))",
42 "([[](((()[[])))[[()]]]](([[()]])))",
43 };
44
45 int run_test(char* pBracketString);
46
47 int main(void)
48 {
49 int i = 0;
50 for ( i = 0; i < COUNT; i++)
51 {
52 if (run_test(brackets_array[i]))
53 {
54 printf("Yes");
55 }else
56 {
57 printf("No");
58 }
59 printf("\n");
60 }
61 }
62
63
64 int run_test(char* pBracketString)
65 {
66 char *ptmp=pBracketString;
67 int k=0,len=0;
68 char stack[LENGTH/2]={‘\0‘};
69 while(*ptmp !=‘\0‘)
70 {
71 ptmp++;
72 len++;
73 }
74 //printf("len=%d len%2=%d\n",len,len%2);
75 if( len%2 )//长度为奇数
76 return 0;
77 else
78 {
79 ptmp=pBracketString;
80 while(*ptmp !=‘\0‘)
81 {
82 #if 1
83 switch(*ptmp)
84 {
85 case ‘(‘:
86 case ‘[‘:
87 stack[k++]=*ptmp;
88 break;
89 case ‘)‘:
90 if( stack[k-1] ==‘(‘ )
91 stack[--k]=‘\0‘;
92 else
93 return 0;
94 break;
95 case ‘]‘:
96 if( stack[k-1] ==‘[‘ )
97 stack[--k]=‘\0‘;
98 else
99 return 0;
100 break;
101 default:
102 break;
103 }
104 ptmp++;
105 }
106 if(stack[0]==‘\0‘)
107 return 1;
108 else
109 return 0;
110 #else
111 if( *ptmp==‘(‘ || *ptmp==‘[‘ )
112 {
113 stack[k++]=*ptmp;
114 ptmp++;
115 continue;
116 }
117
118 if( *ptmp==‘)‘ && stack[k-1] ==‘(‘ )
119 {
120 stack[--k]=‘\0‘;
121 ptmp++;
122 continue;
123 }
124
125 if( *ptmp==‘)‘ && stack[k-1] !=‘(‘ )
126 return 0;
127
128 if( *ptmp==‘]‘ && stack[k-1] ==‘[‘ )
129 {
130 stack[--k]=‘\0‘;
131 ptmp++;
132 continue;
133 }
134 if( *ptmp==‘]‘ && stack[k-1] !=‘[‘ )
135 return 0;
136
137 ptmp++;
138 }
139 if(stack[0]==‘\0‘)
140 return 1;
141 else
142 return 0;
143 #endif
144
145 }
146 }
147
148

经典c程序(0027)一括号匹配

时间: 2024-08-13 01:48:00

经典c程序(0027)一括号匹配的相关文章

NYOJ - 括号匹配(二)(经典dp)

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

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

这里的括号匹配 , 如果两个相同的话   就执行下面的  语句 if(cmp(str[i],str[j])) dp[i][j] = min(dp[i][j],dp[i+1][j-1]); 每次确定  从 i 到 j 的需要填补的 括号的时候  就默认  这个 值是  105 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include&l

括号匹配问题 区间DP经典问题

题目链接 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=15 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来.如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的 分析:要求要添加多少个,可以求出最大匹配的长度,这样剩下的都是没有匹配的,所以每个对于一个匹配就可以了. 即 答案 =

括号匹配问题(C++、堆栈)

原文地址:http://www.cppblog.com/GUO/archive/2010/09/12/126483.html /* 括号匹配问题,比较经典,利用堆栈来实现(摘自internet) 1. 括号匹配的四种可能性: ①左右括号配对次序不正确 ②右括号多于左括号 ③左括号多于右括号 ④左右括号匹配正确 2. 算法思想: 顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈: 当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断: 若当

C++之桟的应用---括号匹配

刚开始学习数据结构,用桟写了一个经典的应用,括号匹配. 算法思路: 输入字符串时,将 '(' , '['  压入桟,遇到 ')'  ']'  时,再栈顶出桟,进行括号匹配,如果成功匹配,则继续进行,否则,程序结束,输入不匹配信息, 如果 ')' ']' 均匹配,则看判断桟是否为空,如果为空,则输入匹配,否则,输出符号数量不匹配. #include<iostream> using namespace std; #define max 100 struct stack { int Top; int

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

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

行编辑程序、括号匹配检验

行编辑程序.括号匹配检验程序都是利用的栈的数据结构.而这两个 小程序也非常好的显示了栈先进后出的思想.由于程序本身很简短.清晰,所 以也就不做多的解释了,直接上代码了. 行编辑程序: #include<iostream> #include<stack> using namespace std; int main() { stack<char> sta; char ch = getchar(); while(ch!=EOF) { while(ch!=EOF&&am

栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配.括号可以延伸到任何成对出现的界定符,例如引号,书名号等. 接下来给出程序实现: 第一部分给出的是堆栈的插入,删除等操作对应的实现: 1 public class StackChar 2 { 3 private int maxSize;//堆栈数组大小 4 private char [] stackArray; 5 private int top;//堆栈顶 6 public StackChar(int maxSize) 7 { 8 thi

POJ 2955 Brackets (区间dp 括号匹配)

Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3951   Accepted: 2078 Description We give the following inductive definition of a "regular brackets" sequence: the empty sequence is a regular brackets sequence, if s is a reg