-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathC9-3.cpp
159 lines (138 loc) · 2.72 KB
/
C9-3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
括号匹配 (100/100 分数)
题目描述
栈的应用非常广泛。请先实现一个栈模板类(定义已在下面给出),然后利用这个栈类解决下面的问题:
给定一个字符串,长度小于1000,其中只包含左右括号和大小写英文字母。请编写程序判断输入的字符串
里的左右括号是否全部是匹配的,匹配规则即从内到外左括号都与其右边距离最近的右括号匹配。
如匹配,输出“Yes”,否则,输出“No”。栈模板类定义如下:
#include <iostream>
#include <string>
using namespace std;
template<class T, int MAX = 1000>
class Stack
{
private:
T list[MAX + 1];
int top;
public:
Stack();
void push(const T &item);//将item压栈
T pop();//将栈顶元素弹出栈
const T & peek() const;//访问栈顶元素
bool isEmpty() const;//判断是否栈空
};
//请完成栈模板类的实现,并解决括号匹配问题
输入描述
每个测例输入一个字符串,长度小于 1000 ,大于 0 。
输出描述
若输入字符串内的所有括号正确匹配,输出“Yes”,否则输出“No”。
样例输入
((let)(us)(practice)((stack)(template)))
()you(should))(out)put(No)
样例输出
Yes
No
*/
#include <iostream>
#include <string>
using namespace std;
template<class T, int MAX = 1000>
class Stack
{
private:
T list[MAX + 1];
int top;
public:
Stack();
void push(const T &item);//将item压栈
T pop();//将栈顶元素弹出栈
const T & peek() const;//访问栈顶元素
bool isEmpty() const;//判断是否栈空
};
template<class T, int MAX>
inline Stack<T, MAX>::Stack()
{
top = 0;
}
template<class T, int MAX>
void Stack<T, MAX>::push(const T & item)
{
if (MAX > top)
{
list[top] = item;
top++;
}
}
template<class T, int MAX>
T Stack<T, MAX>::pop()
{
if (top > 0)
{
top--;
T temp = list[top];
return temp;
}
}
template<class T, int MAX>
const T & Stack<T, MAX>::peek() const
{
if (top != 0)
{
T temp = list[top-1];
return temp;
}
return 0;
// TODO: 在此处插入 return 语句
}
template<class T, int MAX>
bool Stack<T, MAX>::isEmpty() const
{
if (top == 0)
{
return true;
}
return false;
}
int main(void)
{
Stack<char> kuohao;
string shuru;
bool panduan = false;
getline(cin, shuru, '\n');
for (int i = 0; i < shuru.size(); i++)
{
switch (shuru[i])
{
case '(':
kuohao.push('L');
break;
case ')':
if (kuohao.isEmpty() == false)
{
kuohao.pop();
}
else
{
panduan == true;
}
break;
default:
break;
}
if (panduan == true)
{
break;
}
}
if (kuohao.isEmpty() && panduan == false)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
//getchar();
//getchar();
return 0;
}