7-22 符号配对 分数 15 作者 DS课程组 单位 浙江大学 请编写程序检查C语言源程序中下列符号是否配对:/*与*/、(与)、[与]、{与}。
时间: 2024-09-21 21:01:38 浏览: 110
雷柏鼠标配对程序(老版程序v3.4.0-2014.12.04),针对2014年前的老鼠标配对
在 C 语言源程序中,符号配对是非常重要的,特别是用于控制结构如注释、条件语句和循环等。DS课程组的题目要求检测四种特定的符号对:`/*` 与 `*/`(多行注释)、`( ` 与 `)`(圆括号)、`[ ` 与 `]`(方括号)以及 `{ ` 与 `}`(花括号)。为了编写这样一个程序,你可以遍历源代码字符串,并维护一个栈来存储当前未关闭的左符号。
下面是一个简单的伪代码示例:
```c
#include <stdio.h>
#include <string.h>
bool is_pair(char open_char, char close_char) {
return open_char == '{' && close_char == '}';
}
void check_pairs(const char* code) {
stack<char> pairs;
for (int i = 0; code[i]; i++) {
if (code[i] == '/' && code[i + 1] == '*') { // 处理 /* */
int j = i;
while (code[j] != '*' || code[j + 1] != '/') {
j++;
if (j == strlen(code)) break;
}
if (j == strlen(code)) return false; // 注释结束前未找到结束符
i = j + 2; // 跳过结束的 */ 对
} else if (is_pair(code[i], code[i+1])) {
pairs.push(open_char);
} else if (!pairs.empty() && code[i] == close_char) {
if (pairs.top() != open_char) return false;
pairs.pop();
} else {
// 如果遇到不是成对的字符,且栈为空或者非成对字符,返回false
if (pairs.empty()) return false;
}
}
// 检查栈是否为空,所有符号都已正确配对
return pairs.empty();
}
int main() {
const char* source_code = "your_c_code_here";
if (check_pairs(source_code)) {
printf("符号配对正确。\n");
} else {
printf("符号配对错误。\n");
}
return 0;
}
```
阅读全文