数据结构课设 符号配对
2016-03-18 08:53
423 查看
5-4 符号配对 (20分)
请编写程序检查C语言源程序中下列符号是否配对:
挺坑的一道题,主要需要注意/ * */ 的情况,刚开始有些地方没考虑到,在程序中标记出来了。
请编写程序检查C语言源程序中下列符号是否配对:
/*与
*/、
(与
)、
[与
]、
{与
}。
输入格式:
输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。
输出格式:
首先,如果所有符号配对正确,则在第一行中输出YES,否则输出
NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出
?-右符号;如果缺少右符号,则输出
左符号-?。
输入样例1:
void test() { int i, A[10]; for (i=0; i<10; i++) /*/ A[i] = i; } .
输出样例1:
NO /*-?
输入样例2:
void test() { int i, A[10]; for (i=0; i<10; i++) /**/ A[i] = i; }] .
输出样例2:
NO ?-]
输入样例3:
void test() { int i double A[10]; for (i=0; i<10; i++) /**/ A[i] = 0.1*i; } .
输出样例3:
YES
挺坑的一道题,主要需要注意/ * */ 的情况,刚开始有些地方没考虑到,在程序中标记出来了。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <stack> using namespace std; void print(char ch) { if(ch == '(') printf("(-?\n"); else if(ch == '[') printf("[-?\n"); else if(ch == '{') printf("{-?\n"); else if(ch == '<') printf("/*-?\n"); } int main() { char str[1000]; stack <char> s; int flag = 1; while(1){ gets(str); if(str[0] == '.' && str[1] == 0) break; int i; for(i = 0; str[i]; i++) { if(flag == 0) break; //打印出来一次,以后就不必再往后看了 if(str[i] == '(' || str[i] == '[' || str[i] == '{') { s.push(str[i]); } else if(str[i] == '/' && str[i + 1] == '*') { s.push('<'); i++; } else if(str[i] == ')') { if(!s.empty() && s.top() == '(') s.pop(); else { printf("NO\n"); flag = 0; if(s.empty()) { printf("?-)\n"); } else { print(s.top()); } break; } } else if(str[i] == ']') { if(!s.empty() && s.top() == '[') s.pop(); else { printf("NO\n"); flag = 0; if(s.empty()) { printf("?-]\n"); } else { print(s.top()); } break; } } else if(str[i] == '}') { if(!s.empty() && s.top() == '{') s.pop(); else { printf("NO\n"); flag = 0; if(s.empty()) { printf("?-}\n"); } else { print(s.top()); } break; } } else if(str[i] == '*' && str[i + 1] == '/') { i++; //不要忘记往后多走一格 if(!s.empty() && s.top() == '<') s.pop(); else { printf("NO\n"); flag = 0; if(s.empty()) { printf("?-*/\n"); } else { print(s.top()); } break; } } } } if(flag && s.empty()) printf("YES\n"); else if(flag) { printf("NO\n"); //即使flag==0,也有可能不配对 print(s.top()); } return 0; }
相关文章推荐
- 数据结构(16)顺序栈的表示和算法表示
- 【数据结构与算法】十一 最大公约数
- 数据结构(15)栈的定义和抽象定义
- 顺序栈的模板类实现
- 数组中的逆序对
- 二叉树的深度
- 平衡二叉树
- 丑数
- 连续子数组的最大和
- 数组中出现次数超过一半的数字
- 二叉搜索树的后序遍历序列
- 数据结构(java语言描述)顺序栈的使用
- 15.数据结构和内存管理
- 经典算法与数据结构的c++实现——shell排序算法
- uva UVA - 1599 Ideal Path
- 树——一种数据结构
- 从零开始_学_数据结构(零)——数据结构总述
- CODE[VS] 1029 遍历问题
- hdu 3303(线段树+抽屉原理)
- 数据结构(14)线性表之C++实现一元多项式相乘