fork download
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int n; // definisco la variabile che conterrĂ  quanti caratteri leggere
  5. scanf("%d", &n); // leggo il numero di elementi da caricare nel vettore
  6. char v[n]; // definisco un vettore di char lungo n
  7. for (int i=0; i<n; i++) // ciclo che legge n caratteri nella sezione INPUT
  8. {
  9. scanf(" %c", &v[i]); // leggo un char
  10. }
  11.  
  12. int out = controllaParentesi(v,n);
  13.  
  14. if(out == -1)
  15. {
  16. printf("%s","malformata");
  17. }
  18. else if(out == 0)
  19. {
  20. printf("%s","corretta");
  21. }
  22.  
  23. }
  24.  
  25. int controllaParentesi(char a[], int l)
  26. {
  27. int angolata = 0;
  28. int tonde = 0;
  29. int quadrate = 0;
  30. int graffe = 0;
  31.  
  32. if(l%2 != 0)
  33. {
  34. return -1;
  35. }
  36. for(int i = 0; i<l;i++)
  37. {
  38. if((a[i]=='>'&& angolata == 0) || (a[i]==')' && tonde == 0)
  39. ||(a[i]==']' && quadrate == 0)|| (a[i]=='}' && graffe == 0))
  40. {
  41. return -1;
  42. }
  43. else if((a[i]=='>' &&( a[i-1]=='('||a[i-1]=='['||a[i-1]=='{'))
  44. ||(a[i]==')' && (a[i-1]=='<'||a[i-1]=='['||a[i-1]=='{'))
  45. ||(a[i]==']' && (a[i-1]=='<'||a[i-1]=='('||a[i-1]=='{'))
  46. ||(a[i]=='}' && (a[i-1]=='<'||a[i-1]=='('||a[i-1]=='[')))
  47. {
  48. return -1;
  49. }
  50. else if((a[i]==')' && angolata !=0)
  51. || (a[i]==']'&&(angolata !=0 || tonde !=0))
  52. || (a[i]=='}'&&(angolata !=0 || tonde !=0 || quadrate !=0)))
  53. {
  54. return -1;
  55. }
  56. else if((a[i]=='(' && angolata!= 0)
  57. || (a[i]=='['&&(angolata !=0 || tonde !=0))
  58. || (a[i]=='{'&&(angolata !=0 || tonde !=0 || quadrate !=0)))
  59. {
  60. return -1;
  61. }
  62. else if(a[i]=='<')
  63. {
  64. angolata++;
  65. }
  66. else if(a[i]=='>')
  67. {
  68. angolata = angolata - 1;
  69. }
  70. else if(a[i]=='(')
  71. {
  72. tonde++;
  73. }
  74. else if(a[i]==')')
  75. {
  76. tonde = tonde - 1;
  77. }
  78. else if(a[i]=='[')
  79. {
  80. quadrate++;
  81. }
  82. else if(a[i]==']')
  83. {
  84. quadrate = quadrate - 1;
  85. }
  86. else if(a[i]=='{')
  87. {
  88. graffe++;
  89. }
  90. else if(a[i]=='}')
  91. {
  92. graffe = graffe -1;
  93. }
  94. }
  95. if(angolata != 0 || tonde != 0 || quadrate != 0 || graffe != 0)
  96. {
  97. return -1;
  98. }
  99.  
  100. return 0;
  101.  
  102. }
Success #stdin #stdout 0s 4460KB
stdin
8
()()()()
stdout
corretta