diff --git a/tema_3/paranteze.cpp b/tema_3/paranteze.cpp index 2272e02..0362835 100644 --- a/tema_3/paranteze.cpp +++ b/tema_3/paranteze.cpp @@ -3,52 +3,86 @@ //implementare proprie sau std::stack. Exemplu: şirul [()()] este corect, şirul //([]) nu este corect, şirul ()]( nu este corect. // -#include -#include +#include +#include -std::string paranteze; -std::stack stiva; - int ok=1; - -void rotundeInchise(std::string paranteze); - -int main() { +int main(){ + std::string paranteze; + std::stack stiva; std::cout <<"sir de paranteze = "; std::cin >> paranteze; - - bool acolada, patrata; + bool ok = true; + int n = paranteze.size(); - for (int i = 0; i < paranteze.size(); i++) { - if (paranteze[i] == '{') { - stiva.push('{'); - } - else if (paranteze[i] == '[') { - stiva.push('['); - } - else if (paranteze[i] == '(') - stiva.push('('); - - else { - if (paranteze[i] == ')' || paranteze[i] == ']' || paranteze[i] == '}') { - if(!stiva.empty()){ - stiva.pop(); - } - else { - std::cout<<"prea multe paranteze deschise \n"; - ok=0; - break; - } + for (int i = 0; i < n; i++) { + // {[( + if(i + 2 < n && paranteze[i] == '{' && paranteze[i+1] == '[' && paranteze[i+2] == '('){ + stiva.push('{'); + stiva.push('['); + stiva.push('('); + i += 2; + } + // [( + else if(i + 1 < n && paranteze[i] == '[' && paranteze[i+1] == '(') { + stiva.push('['); + stiva.push('('); + i += 1; + } + // ( + else if (paranteze[i] == '('){ + stiva.push('('); + } + // )]} + else if(i + 2 < n && paranteze[i] == ')' && paranteze[i+1] == ']' && paranteze[i+2] == '}'){ + if(stiva.size() >= 3){ + stiva.pop(); + stiva.pop(); + stiva.pop(); + i += 2; + } + else{ + std::cout << "nu sunt închise )]} \n"; + ok = false; + break; } } + // )] + else if(i + 1 < n && paranteze[i] == ')' && paranteze[i+1] == ']') { + if(stiva.size() >= 2){ + stiva.pop(); + stiva.pop(); + i += 1; + } + else{ + std::cout << "nu sunt închise )] \n"; + ok = false; + break; + } + } + // ) + else if(paranteze[i] == ')'){ + if(!stiva.empty()){ + stiva.pop(); + } + else{ + std::cout << "nu sunt închise ) \n"; + ok = false; + break; + } + } + else{ + std::cout << "Caracter invalid sau ordine gresita\n"; + ok = false; + break; + } } - - if (ok && stiva.empty()) { - std::cout << "toate sunt închise"; + + if(ok && stiva.empty()){ + std::cout << "e bun sirul"; } - else { - std::cout << "nu sunt închise"; + else if(ok){ + std::cout << "paranteze neînchise"; } - - return 0; - -} + + return 0; +} \ No newline at end of file