用c++写出代码 括号匹配
时间: 2023-09-14 20:05:45 浏览: 101
c++括号匹配
5星 · 资源好评率100%
### 回答1:
下面是用C语言写括号匹配的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
bool isEmpty(Stack *s) {
return s->top == -1;
}
bool isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, char c) {
if (isFull(s)) {
printf("Stack overflow!\n");
exit(EXIT_FAILURE);
}
s->data[++(s->top)] = c;
}
char pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow!\n");
exit(EXIT_FAILURE);
}
return s->data[(s->top)--];
}
int main() {
Stack s;
init(&s);
char c;
printf("Please enter a string: ");
while ((c = getchar()) != '\n') {
if (c == '(' || c == '[' || c == '{') {
push(&s, c);
} else if (c == ')' || c == ']' || c == '}') {
char top = pop(&s);
if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{')) {
continue;
} else {
printf("Mismatched brackets!\n");
exit(EXIT_FAILURE);
}
}
}
if (!isEmpty(&s)) {
printf("Mismatched brackets!\n");
exit(EXIT_FAILURE);
}
printf("Matching brackets!\n");
return 0;
}
```
使用方法:
1. 编译代码:`gcc -o bracket_matching bracket_matching.c`
2. 运行程序:`./bracket_matching`
3. 在命令行中输入一串括号,按回车结束输入,程序会输出是否匹配。
示例输入:
```
(([]{}){}[])
```
示例输出:
```
Matching brackets!
```
### 回答2:
括号匹配是指在一个字符串中判断所有的括号是否正确闭合。例如,字符串"((()))()"中的括号是正确闭合的,而字符串"(()))"中的括号是不正确闭合的。
下面是用C语言写的一个简单的括号匹配代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 栈结构
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 入栈
void push(Stack *s, char c) {
s->data[++(s->top)] = c;
}
// 出栈
char pop(Stack *s) {
return s->data[(s->top)--];
}
// 括号匹配函数
int isParenthesesMatched(char *str) {
Stack s;
initStack(&s);
int i = 0;
while (str[i] != '\0') {
if (str[i] == '(') {
push(&s, '(');
} else if (str[i] == ')') {
if (isEmpty(&s)) {
return 0;
}
pop(&s);
}
i++;
}
return isEmpty(&s);
}
int main() {
char str[100];
printf("请输入字符串:");
scanf("%s", str);
if (isParenthesesMatched(str)) {
printf("括号匹配正确\n");
} else {
printf("括号匹配错误\n");
}
return 0;
}
```
该代码定义了一个栈结构,用于存储括号字符。括号匹配函数遍历输入的字符串,如果遇到左括号,则将其压入栈中;如果遇到右括号,则检查栈是否为空,若为空则表示没有与之相匹配的左括号,返回错误;若不为空,则从栈顶弹出一个左括号。最后,判断栈是否为空,若为空则表示所有括号都正确闭合,返回正确,否则返回错误。
程序运行时,会要求输入一个字符串,然后根据括号匹配的结果输出"括号匹配正确"或"括号匹配错误"。
### 回答3:
以下是一个用C语言编写的括号匹配代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构
typedef struct StackNode {
char data;
struct StackNode* next;
} StackNode;
// 创建栈
StackNode* createStack() {
return NULL;
}
// 判断栈是否为空
int isEmpty(StackNode* stack) {
return stack == NULL;
}
// 入栈
void push(StackNode** stack, char data) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = data;
newNode->next = *stack;
*stack = newNode;
}
// 出栈
char pop(StackNode** stack) {
if (isEmpty(*stack))
return '\0';
StackNode* top = *stack;
*stack = top->next;
char data = top->data;
free(top);
return data;
}
// 检查括号匹配
int checkBracketMatch(char* expression) {
StackNode* stack = createStack();
while (*expression) {
if (*expression == '(' || *expression == '[' || *expression == '{')
push(&stack, *expression);
else if (*expression == ')' || *expression == ']' || *expression == '}') {
if (isEmpty(stack))
return 0;
char top = pop(&stack);
if ((*expression == ')' && top != '(') || (*expression == ']' && top != '[') || (*expression == '}' && top != '{'))
return 0;
}
expression++;
}
return isEmpty(stack);
}
int main() {
char expression[100];
printf("请输入表达式:\n");
scanf("%s", expression);
if (checkBracketMatch(expression))
printf("括号匹配正确\n");
else
printf("括号匹配错误\n");
return 0;
}
```
这段代码实现了一个函数`checkBracketMatch`,它能够检查输入的表达式中的括号是否匹配。该函数使用栈来辅助进行匹配,遍历表达式中的每一个字符,如果是左括号则入栈,如果是右括号则与栈顶元素进行匹配,如果匹配成功则出栈,如果匹配失败则返回错误。最终栈为空则表示括号匹配正确,否则匹配错误。
阅读全文