Dziwne zadanie z nawiasami

0

Mam tu taki program do napisania w C++.
Wpisujemy sekwencję nawiasów i program ma sprawdzać czy one są prawidłowo ułożone np ()()(())() jest prawidłowo a )()))( nie jest.
Nie mam pomysłu jak to zrobić.

1

jedno z rozwiazan. Jest najprostsze do zaimplementowania moim zdaniem, lecz troszke zasobozerne ;) Jednak watpie zebys potrzebowal super optymalnej wersji

wez ten napis i znajduj (). Kasuj z tego napisu znalezniony (). Rob to dopoki size > 2 pozniej gdy size bedzie 2. To sprawdzasz co Ci zwroci find. Jezeli pozycje to wszystkie beda poprawne, jezeli -1 to wtedy nie sa w odpowiedniej pozycji lub po prostu jest tylko jeden element

13

Zrób sobie licznik, na samym początku ustaw go na zero i iteruj znak po znaku - inkrementuj ten licznik po napotkaniu ( i dekrementuj przy ).
Jeżeli w którymś momencie jego wartość spadnie poniżej zera, nawiasy są źle ułożone.
Będą źle ułożone również, gdy pod koniec jego wartość będzie różna od zera.

2

Stwórz jakąś zmienną, zainicjalizuj zerem.
Potem przeiteruj po tej sekwencji i dla każdego nawiasu dodawaj 1 do tej zmiennej jeśli nawias jest otwierający, odejmuj 1 jeśli jest zamykający. Jeśli po którejkolwiek iteracji zmienna będzie < 0 to nawiasy są ułożone nieprawidłowo.
Na wyjściu zmienna musi wynosić 0

no kurde 4 sekundy za późno ;D

0

Dzięki panowie. Udało mi się nawet napisać program:

#include <iostream>

using namespace std;

int main()
{
    cout << "Wprowadz nawiasy" << endl;
    string nawiasy;
    cin >> nawiasy;
    int licznik=0;
    for(int i=0;i<nawiasy.length();i++)
    {
        if(nawiasy[i]=='(') licznik++;
        else if (nawiasy[i]==')') licznik--;
        if (licznik<0)
        {
            cout << "Nawiasy sa zle ulozone";
            return 0;
        }
    }
    if (licznik==0)
        cout << "Nawiasy sa prawidlowo ulozone";
    else
        cout << "Nawiasy sa zle ulozone";
    return 0;
}
0

zle napisane
rozpatrzyles jeden przypadek

1 użytkowników online, w tym zalogowanych: 0, gości: 1