给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。用C语言实现
时间: 2023-07-10 07:41:38 浏览: 195
以下是C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
char stack[MAX_LEN]; // 定义一个栈
int top = -1; // 栈顶指针,初始值为-1
// 判断栈是否为空
int is_empty() {
return top == -1;
}
// 入栈操作
void push(char c) {
stack[++top] = c;
}
// 出栈操作
char pop() {
return stack[top--];
}
// 判断括号是否匹配
char* is_matched(char* s) {
int len = strlen(s);
for (int i = 0; i < len; i++) {
char c = s[i];
if (c == '(' || c == '[' || c == '{') { // 左括号入栈
push(c);
}
else if (c == ')' || c == ']' || c == '}') { // 右括号与栈顶元素匹配
if (is_empty()) { // 如果栈为空,说明没有左括号与之匹配
return "no";
}
char top_c = pop(); // 弹出栈顶元素
if (c == ')' && top_c == '(' ||
c == ']' && top_c == '[' ||
c == '}' && top_c == '{') { // 如果匹配,继续扫描
continue;
}
else { // 否则,括号不匹配
return "no";
}
}
}
return is_empty() ? "yes" : "no"; // 最终如果栈为空,则说明所有括号都匹配
}
int main() {
char s[MAX_LEN];
fgets(s, MAX_LEN, stdin); // 读入一行字符串
s[strlen(s) - 1] = '\0'; // 将换行符替换为字符串结束符
printf("%s\n", is_matched(s)); // 输出匹配结果
return 0;
}
```
程序的基本思路与Python实现类似,使用栈来匹配括号。对于左括号,入栈;对于右括号,与栈顶元素匹配,如果匹配则弹出栈顶元素,否则括号不匹配。最终如果栈为空,则说明所有括号都匹配。注意,为了方便输入,使用fgets函数读入一行字符串,并将换行符替换为字符串结束符。
阅读全文