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ć.
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
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.
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
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;
}
zle napisane
rozpatrzyles jeden przypadek