符号配对 (20分)

请编写程序检查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 idouble A[10];for (i=0; i<10; i++) /**/A[i] = 0.1*i;
}
.

输出样例3:

YES

思路:

因为输入中有/* */这种两个单元的符号,遂考虑一个判断函数,用来将符号转化为数字,左边为正数,右边为负数。

遇到正数符号的时候直接入栈,遇到负数符号的时候,判断currentChar + s.top()是否为零,

为零:出栈

不为零:printError(s.top())

其他情况自行阅读代码。

上代码:

#include <iostream>
#include <cstring>
#include <string>
#include <stack>
#include <map>
using namespace std;// /**/{}()[]
typedef int Position;struct CodeStream {string code;Position pos = 0;Position length = 0;
};map<char, int> symbolVal{{'(', 1}, {')',-1},{'[', 2}, {']',-2},{'{', 3}, {'}',-3},
};
map<int, string> valSymbol{{1,"("}, {-1,")"},{2,"["}, {-2,"]"},{3,"{"}, {-3,"}"},{4,"/*"},{-4,"*/"}
};CodeStream& getInput();
int getMark(CodeStream& codeStream);
void printError(int c);int main() {auto codeStream = getInput();stack<int> s;while (codeStream.pos < codeStream.length) {const auto currentSymbol = getMark(codeStream);if (currentSymbol > 0) {s.push(currentSymbol);} else if (currentSymbol < 0) {if (s.empty()) printError(currentSymbol);if (s.top() + currentSymbol) printError(s.top());else s.pop();}codeStream.pos += 1 + (abs(currentSymbol) == 4);}if (!s.empty()) printError(s.top());cout << "YES" << endl;return 0;
}CodeStream& getInput() {auto rtn = new CodeStream;char tmpString[1000]{ '\0' };do {rtn->code += tmpString;cin.getline(tmpString, sizeof tmpString);} while (strcmp(tmpString, ".") != 0);rtn->length = rtn->code.length();return *rtn;
}int getMark(CodeStream& codeStream) {const auto currentChar = codeStream.code[codeStream.pos];if (symbolVal.find(currentChar)!=symbolVal.end()) {return symbolVal[currentChar];}if (currentChar == '/' && codeStream.code[codeStream.pos + 1] == '*') return 4;if (currentChar == '*' && codeStream.code[codeStream.pos + 1] == '/') return -4;return 0;
}void printError(int c) {cout << "NO" << endl;if (c < 0) cout << "?-" << valSymbol[c] << endl;else cout << valSymbol[c] << "-?" << endl;exit(0);
}

C语言 符号配对 (20分)相关推荐

  1. 7-2 符号配对 (20 分) c语言版

    题目 请编写程序检查C语言源程序中下列符号是否配对:/与/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配 ...

  2. 7-6 符号配对 (20 分)(C语言版)

    请编写程序检查C语言源程序中下列符号是否配对:/与/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对的符 ...

  3. 习题3.8 符号配对 (20分) c语言

    请编写程序检查C语言源程序中下列符号是否配对:/与/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对的符 ...

  4. 7-5 符号配对 (20 分)

    请编写程序检查C语言源程序中下列符号是否配对:/与/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对的符 ...

  5. 习题3.8 符号配对 (20分)

    请编写程序检查C语言源程序中下列符号是否配对:/*与*/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对 ...

  6. *chap3 7-3 符号配对 (20 分)

    请编写程序检查C语言源程序中下列符号是否配对:/*与*/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对 ...

  7. 7-2 符号配对 (25 分)(C语言版)

    请编写程序检查C语言源程序中下列符号是否配对:/与/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束.程序中需要检查配对的符 ...

  8. 1062最简分数c语言,1062 最简分数 (20分)C语言

    一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N1/M1和 N2/M​2,要求你按从小到大的顺序列出它们之间 ...

  9. 习题3.8 符号配对 (20 分)【满分】【c语言】

    习题3.8 符号配对 (20 分) 请编写程序检查C语言源程序中下列符号是否配对:/与/.(与).[与].{与}. 输入格式: 输入为一个C语言源程序.当读到某一行中只有一个句点.和一个回车的时候,标 ...

  10. /* * 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“

    题目: 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 *****************    所谓" ...

最新文章

  1. UIWebView、WKWebView使用详解及性能分析
  2. 稀疏矩阵快速转置核心代码
  3. ROCK 聚类算法‏
  4. mysql编辑工具wf_轻松构建自定义WF设计器
  5. Elasticsearch 参考指南(重要的系统配置)
  6. windows phone (23) ScrollViewer元素
  7. spring 的配置 beanpropertyname属性
  8. awk 中 {print $1} 什么意思
  9. c语言中const的作用面试,C语言const关键字作用
  10. 毕业论文格式系列---1.论文公式编号
  11. pano2vr无法输出html5,教大家Pano2VR怎么输出全景图的方法
  12. px、em、rem、rpx 用法 与 区别
  13. 点集拓扑学习(一)拓扑空间
  14. jquery 表格分页等操作实现代码(pagedown,pageup)
  15. 快速飞入城市空中交通的未来-权威公司发布参考
  16. [英文邮件] 表达感谢的话 + 回复别人的祝福
  17. PTA 7-2 大炮打蚊子
  18. gradle-6.3-all 快速下载
  19. C语言 杨氏矩阵,二维数组查找数字。
  20. R语言数据合并与连接技巧

热门文章

  1. 免费机器视觉视频教程halcon-百度网盘
  2. 所谓的原创内容对于seo的意义在何方?
  3. WPF教程(三十四)Hello, bound world!
  4. 扩展欧几里得算法求逆元c语言,利用扩展欧几里得算法编程求逆元
  5. 电池电量显示模块、美容仪、剃须刀、血氧仪、红外体温计、脱毛器、(耳)额温枪、电子秤等段码屏LCD液晶显示驱动IC-VK1024B 6*4段显示,VK1056 14*4段显示,少脚位1621,具省电模式
  6. 广义预测控制及其matlab仿真,广义预测控制(GPC).doc
  7. 5 个接私活必备的 Java 开源项目!
  8. HTML页面跳转的5种方法
  9. fluidsim元件库下载_基于仿真软件的系统EMC设计解析
  10. 吴裕雄--天生自然 高等数学学习:函数展开成幂级数