Advertisement
madalinaradu

ASD Pb 13 paranteze

May 26th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. /** sa se verifice daca intr-o expresie parantezele se inchid corect: ex: (ab[c]d){e} */
  2.  
  3. #include <iostream>
  4. #include <stack>
  5. #include <string.h>
  6. using namespace std;
  7.  
  8. /** verifica daca o parenteza deschisa coincide cu una inchisa de acelasi tip*/
  9. bool estePereche(char deschis, char inchis) {
  10.     if (deschis == '(' && inchis == ')')
  11.         return true;
  12.     if (deschis == '[' && inchis == ']')
  13.         return true;
  14.     if (deschis == '{' && inchis == '}')
  15.         return true;
  16.  
  17.     return false;
  18. }
  19.  
  20. bool verificaParanteze(char *s) {
  21.     /// stiva folosita in care vom insera parantezele
  22.     char stiva[100];
  23.     int n=0;///nr de elemente din stiva, initial 0
  24.     char c;
  25.     int i;
  26.  
  27.     for(i=0; i<strlen(s); i++) {
  28.         if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
  29.                                          ///parantezele deschise le pun in stiva
  30.             stiva[n++]=s[i];
  31.  
  32.             cout<<"Pun in stiva: "<<s[i]<<endl;
  33.  
  34.         } else  if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
  35.                                           ///Daca e o paranteza inchisa extrag elementul din varful stivei si verificam daca e pereche.
  36.             if (n==0) {                   ///stiva e vida
  37.                                           ///am gasit o paranteza inchisa si in stiva nu am nimic
  38.                 return false;
  39.  
  40.             } else {
  41.  
  42.                 c= stiva[--n];            ///iau elementul din varful stivei, care este tot timpul "deschis"
  43.  
  44.                 cout<<"Scot "<<c<<endl;
  45.                 if(!estePereche(c,s[i])) {
  46.                     return false;
  47.                 }
  48.             }
  49.         }
  50.     }
  51.     if (n == 0)
  52.         return true;
  53.     else
  54.         return false;
  55.  
  56. }
  57.  
  58. int main() {
  59.     char expresie[100];
  60.     cout<<"Dati expresia cu paranteze:";
  61.     cin>>expresie;
  62.     if (verificaParanteze(expresie)) {
  63.         cout<<"Expresia " << expresie << " e valida";
  64.     } else {
  65.         cout<<"Expresia " << expresie << " e invalida";
  66.     }
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement