Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4.  
  5. #define OK 0
  6. #define ERROR -1
  7. #define MAXSIZE 100
  8.  
  9. //定义栈
  10. struct Stack{
  11. int top; //栈顶下标
  12. char S[MAXSIZE];//字符数组
  13. };
  14. typedef struct Stack stack;
  15.  
  16. //栈初始化
  17. void init(stack *s)
  18. {
  19. s->top=0;
  20. }
  21. //判断栈是否为空
  22. int empty(stack *s)
  23. {
  24. if(s->top==0) return 1;
  25. return 0;
  26. }
  27. //判断栈是否为满
  28. int full(stack *s)
  29. {
  30. if(s->top==MAXSIZE) return 1;
  31. return 0;
  32. }
  33.  
  34. //压栈
  35. int push(stack *s,char c)
  36. {
  37. if(full(s)) //上溢
  38. return ERROR;
  39. s->S[s->top]=c;
  40. s->top++;
  41. return OK;
  42. }
  43. //出栈
  44. int pop(stack *s)
  45. {
  46. if(empty(s)) //下溢
  47. return ERROR;
  48. char c;
  49. c=s->S[s->top--];
  50. return OK;
  51. }
  52. //括号匹配
  53. int match(stack *s,char st[])
  54. {
  55. int i,len;
  56. char c;
  57. init(s);
  58. len=strlen(st);
  59.  
  60. for(i=0;i<len;i++)
  61. {
  62. c=st[i];
  63. if(c=='('||c=='['||c=='{') //如果是左括号则进栈
  64. push(s,c);
  65. else if(c==')') //如果是右括号则出栈匹配
  66. {
  67. if(empty(s)) return ERROR;//下溢
  68. else if(s->S[s->top]=='(') pop(s); //匹配则出栈
  69. else return ERROR;
  70. }
  71. else if(c==']')
  72. {
  73. if(empty(s)) return ERROR;//下溢
  74. else if(s->S[s->top]=='[') pop(s); //匹配则出栈
  75. else return ERROR;
  76. }
  77. else if(c=='}')
  78. {
  79. if(empty(s)) return ERROR;//下溢
  80. else if(s->S[s->top]=='{') pop(s); //匹配则出栈
  81. else return ERROR;
  82. }
  83. else return ERROR; //如果不是()[]{}这六种符号则返回-1.
  84. }
  85. if(empty(s)) return OK; //全部匹配,返回0
  86. return ERROR;
  87. }
  88.  
  89. int main()
  90. {
  91. int n;
  92. char st[1000];
  93. stack *s;
  94. s=(stack*)malloc(sizeof(stack));
  95. init(s); //初始化栈
  96. scanf("%d",&n); //输入要检测的字符串组数
  97. while(n--)
  98. {
  99. scanf("%s",st); //输入要检测的字符串
  100. if (match(s,st)) printf("correct\n");
  101. else printf("error\n");
  102. }
  103. free(s);
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement