网站开发href使用本地链接,企业邮箱注册申请免费注册126,建设糖果网站的好处有哪些,it教育网站建设符号配对
题目链接
题目描述 请编写程序检查C语言程序中下列符号是否配对#xff1a;/* 与 */,(与),[与],{与} 输入描述 输入为一个c语言程序的一部分。当读到某一行中只有一个句点“.”和一个回车时#xff0c;标志着输入结束。程序中需要检查配对的符号不超过2000个。 输…符号配对
题目链接
题目描述 请编写程序检查C语言程序中下列符号是否配对/* 与 */,(与),[与],{与} 输入描述 输入为一个c语言程序的一部分。当读到某一行中只有一个句点“.”和一个回车时标志着输入结束。程序中需要检查配对的符号不超过2000个。 输出描述 如果所有符号都配对正确则在第一行输出YES。否则在第一行输出NO然后再第二行指出第一个不配对的符号如果缺少左符号则输出“?-右符号”如果缺少右符号则输出“左符号-”。 样例 输入 void test() { int i, A[10]; for (i0; i10; i) /**/ A[i] i; }] . 输出 NO ?-] 思路
遇到左符号直接入栈遇到右符号 判断栈是否为空若为空则找到第一个不匹配的符号输出即可。否则判断其与栈顶符号是否匹配若匹配则删除栈顶元素继续扫描否则找到了第一个不匹配的符号即栈顶元素退出循环。 扫描结束后若栈为空则所有符号匹配成功否则栈顶元素为第一个不匹配的符号输出即可
难点 /* 的处理将其合并为一个字符便于判断 Code:
#includebits/stdc.h
using namespace std;
const int N 1e510;
string s;
stackchar st;
mapchar,char mp;
void work() {mp[)] (;mp[]] [;mp[}] {;
}
int main() {work();string tep;while(cin tep) {if(tep.) break;step;}bool ok 1;string res;for(int i0; is.size(); i) {if(s[i]( || s[i][ || s[i]{) st.push(s[i]);if(s[i]/ i1s.size() s[i1]*) {st.push(x);i;continue;}if(s[i]) || s[i]] || s[i]}) {if(st.empty()) {puts(NO);cout?-s[i];return 0;}if(mp[s[i]] st.top()) st.pop();else ok 0;}if(s[i]* i1s.size() s[i1]/) {if(st.empty()) {puts(NO);cout?-s[i]s[i1];return 0;}i;if(st.top()x) st.pop();else ok 0;}if(!ok) break;}if(st.empty()) puts(YES);else {puts(NO);if(st.top()x) res /*;else res st.top();coutres-?;}return 0;
}