用c语言完成1. 输入一个包含括号的字符串,检查括号是否成对匹配。 2. 使用栈结构,遇到左括号时入栈,遇到右括号时弹出栈顶元素进行匹配。
时间: 2024-09-26 20:03:14 浏览: 65
在C语言中,你可以通过遍历输入的字符串,并利用栈的数据结构来检查括号是否成对匹配。下面是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
char* elements;
int top;
int size;
} Stack;
// 初始化栈
Stack* create_stack(int capacity) {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->elements = (char*)malloc(capacity * sizeof(char));
s->top = -1;
s->size = 0;
return s;
}
// 入栈操作
void push(Stack* s, char c) {
if (s->top == s->size - 1) {
s->size *= 2;
s->elements = (char*)realloc(s->elements, s->size * sizeof(char));
}
s->elements[++s->top] = c;
}
// 出栈操作
bool pop(Stack* s, char* result) {
if (s->top == -1) {
printf("Stack is empty.\n");
return false;
} else {
*result = s->elements[s->top];
s->top--;
return true;
}
}
// 检查括号是否匹配
bool check_brackets(char str[]) {
Stack* stack = create_stack(strlen(str));
bool opening_bracket[] = {'(', '[', '{'};
bool closing_bracket[] = {')', ']', '}'}; // 对应的闭合括号
for (int i = 0; str[i]; i++) {
if (opening_bracket[str[i] - '[']) { // 如果遇到左括号
push(stack, str[i]);
} else if (closing_bracket[str[i] - '[']) { // 遇到右括号
if (stack->top == -1 || closing_bracket[str[i] - '['] != opening_bracket[stack->elements[stack->top] - '[']) {
return false; // 匹配失败,直接返回false
} else {
pop(stack, NULL); // 成功匹配,出栈
}
}
}
// 判断栈是否为空,如果为空说明所有括号都已匹配
return stack->top == -1;
}
int main() {
char str[100];
printf("Enter a string with brackets: ");
fgets(str, sizeof(str), stdin);
str[strlen(str) - 1] = '\0'; // remove newline character
if (check_brackets(str)) {
printf("The brackets are correctly matched.\n");
} else {
printf("The brackets are not correctly matched.\n");
}
free(stack->elements);
free(stack);
return 0;
}
```
在这个程序中,我们首先创建一个栈,然后遍历字符串,当遇到左括号时将其压入栈中,遇到右括号时检查栈顶元素是否与其对应,如果不匹配则返回错误。最后判断栈是否为空,如果为空则表示所有括号匹配。
阅读全文