1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. void qukuohao(int left,int right,char a[])
  5. {
  6. int inside,outside;//括号内等级和括号外等级
  7. int zuo,you;//左括号等级和右括号等级
  8. //对于括号外等级,只要判断括号外一格的符号
  9. if(left==0||a[left-1]=='('||a[left-1]=='+'||a[left-1]==-1)zuo=1;
  10. else if(a[left-1]=='-')zuo=2;//-在括号前面等级介于'+'和'*'之间
  11. else if(a[left-1]=='*')zuo=3;
  12. else if(a[left-1]=='/')zuo=4;//除同理
  13. else if(a[left-1]=='^')zuo=5;
  14. if(right==strlen(a)-1||a[right+1]==')'||a[right+1]=='+'||a[right+1]=='-'||a[right+1]==-1)you=1;
  15. else if(a[right+1]=='*'||a[right+1]=='/')you=3;
  16. else if(a[right+1]=='^')you=5;
  17. outside=zuo>you?zuo:you;
  18. //对于括号内等级,要么括号内一格是括号,要么括号内两格是符号
  19. if(a[left+1]=='('||a[left+2]=='+'||a[left+2]=='-'||a[left+2]==-1||a[left+2]==')')zuo=1;
  20. else if(a[left+2]=='*'||a[left+2]=='/')zuo=3;
  21. else if(a[left+2]=='^')zuo=5;
  22. if(a[right-1]==')'||a[right-2]=='+'||a[right-2]=='-'||a[right-2]==-1||a[right-2]=='(')you=1;
  23. else if(a[right-2]=='*'||a[right-2]=='/')you=3;
  24. else if(a[right-2]=='^')you=5;
  25. inside=zuo>you?zuo:you;
  26. if(inside>=outside)//若括号内等级大于等于括号外等级去括号
  27. {
  28. a[left]=-1;
  29. a[right]=-1;
  30. }
  31. }
  32. int main()
  33. {
  34. char a[21];
  35. while(1)
  36. {
  37. cin.getline(a,21);
  38. if(a[0]=='\0'||a[0]=='#')break;
  39. int len=strlen(a);
  40. int left=0,right=0;
  41. while(left<len&&len)
  42. {
  43. //下一左括号
  44. while(left<len)
  45. {
  46. if(a[left]=='(')break;
  47. left++;
  48. }
  49. //下一右括号
  50. right=left+1;
  51. int temp=0;//表示中间括号数量
  52. while(right<len)
  53. {
  54. //跳过中间括号
  55. if(a[right]==')'&&temp==0)break;
  56. else if(a[right]==')'&&temp!=0)temp--;
  57. else if(a[right]=='(')temp++;
  58. right++;
  59. }
  60. if(left<len)qukuohao(left,right,a);
  61. left++;
  62. }
  63. //打印
  64. for(int i=0;i<len;i++)
  65. if(a[i]!=-1)cout<<a[i];
  66. cout<<endl;
  67. }
  68. return 0;
  69. }
点赞(0)
 

3 分

0 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论