编写一个程序,接受用户输入的一个字符串,并检查该字符串是否为有效的括号序列(例如: "{()]}"是有效的,而"{[(])}"是无效的)。C++
时间: 2024-12-16 17:22:19 浏览: 5
aba.rar_ABA_判断以@为结束符的字符串是否_回文序列
在C++中,编写一个检查有效括号序列的程序可以利用栈的数据结构来实现。栈是一种后进先出(LIFO)的数据结构,当遇到左括号(如'{', '(', '[')时入栈,遇到右括号时检查栈顶元素是否与其匹配,如果匹配则出栈,如果不匹配则说明不是有效的括号序列。
以下是一个简单的C++代码示例:
```cpp
#include <iostream>
#include <stack>
#include <string>
bool isValid(String str) {
stack<char> s;
for (char ch : str) {
if (ch == '{' || ch == '(' || ch == '[') {
s.push(ch);
} else if (ch == ')' && !s.empty() && s.top() == '(') {
s.pop();
} else if (ch == '}' && !s.empty() && s.top() == '{') {
s.pop();
} else if (ch == ']' && !s.empty() && s.top() == '[') {
s.pop();
} else {
return false; // 匹配失败,直接返回false
}
}
// 如果所有右括号都找到了对应的左括号,栈为空,则是有效的
return s.empty();
}
int main() {
std::string input;
std::cout << "Enter a string of brackets: ";
std::cin >> input;
if (isValid(input)) {
std::cout << "The sequence is valid.\n";
} else {
std::cout << "The sequence is not valid.\n";
}
return 0;
}
```
在这个程序中,`isValid`函数遍历输入字符串中的每个字符,通过栈来判断它们是否构成有效的括号对。当遇到一个右括号时,如果没有找到相应的左括号(即栈为空),或者栈顶元素不是左括号的对应部分,那么就返回`false`。如果所有字符都处理完了,栈也为空,说明所有的括号都是成对出现的,所以返回`true`。
阅读全文