C - Sekwencje nawiasów
Ostatnio zmodyfikowano 2012-01-16 15:33
orion Temat założony przez niniejszego użytkownika |
C - Sekwencje nawiasów » 2012-01-14 13:33:24 Witam, mam problem moim programem który sprawdza poprawność sekwencji nawiasów.
Gubi się dla np: (([)])), może jakaś wskazówka jak go poprawić?
#include<stdio.h> #include<string.h> #define LENGTH 10000 int main() { int i; int parenthesis; int square_bracket; int length; i = 0; parenthesis = 0; square_bracket = 0; length = 0; char tab[ LENGTH ]; printf( "Podaj sekwencje nawiasow:\n" ); scanf( "%s", tab ); for( i = 0, length = strlen( tab ); i < length; i++ ) { switch( tab[ i ] ) { case '(': parenthesis++; break; case ')': parenthesis--; break; case '[': if( parenthesis != 0 ) break; square_bracket++; break; case ']': if( parenthesis != 0 ) break; square_bracket--; break; } if(( parenthesis < 0 ) ||( square_bracket < 0 ) ) break; } if( parenthesis || square_bracket ) printf( "Zapis jest niepoprawny!" ); else printf( "Zapis jest poprawny!" ); return 0; }
Z góry dziękuje za pomoc |
|
ison |
» 2012-01-14 13:43:20 dla każdego nawiasu { jeśli jest otwierający to wrzuć go na stos jeśli jest zamykający to { jeśli stos jest pusty to przerwij program -> błędne nawiasowanie jeśli nawias z góry stosu jest tego samego typu to go zdejmij jeśli nie jest to przerwij program -> błędne nawiasowanie } } jeśli stos jest niepusty -> błędne nawiasowanie |
|
orion Temat założony przez niniejszego użytkownika |
» 2012-01-14 13:45:39 Ok dzięki spróbuje to zrobić Twoim algorytmem.
|
|
DejaVu |
» 2012-01-14 13:48:16 Za zmuszanie do pisania w czystym C powinno się palić na stosie ;p |
|
orion Temat założony przez niniejszego użytkownika |
» 2012-01-16 13:36:00 #include<stdio.h> #include<string.h> #define LENGTH 10000 int iSTOS[ LENGTH ]; int iPOZYCJA = 0;
iPush( int X ) { if( iPOZYCJA >= 0 ) iSTOS[ iPOZYCJA++ ] = X; } iPop() { if( iPOZYCJA >= 0 ) return iSTOS[ --iPOZYCJA ]; else return - 1; }
main() { int i; int o; int k; int length; char tab[ LENGTH ]; int X[ LENGTH ]; printf( "Podaj sekwencje nawiasow:\n" ); scanf( "%s", tab ); for( i = 0, length = strlen( tab ); i < length; i++ ) { switch( tab[ i ] ) { case '(': iPush( X[ 0 ] ); break; case '[': iPush( X[ 1 ] ); break; case ')': o = iPop(); if( tab[ i ] - o == 1 ) iPOZYCJA--; else printf( "Zapis jest niepoprawny" ); break; case ']': k = iPop(); if( tab[ i ] - k == 2 ) iPOZYCJA--; else printf( "Zapis jest niepoprawny" ); break; } } if( iPOZYCJA == 0 ) printf( "Zapis jest poprawny" ); else printf( "Zapis jest niepoprawny" ); return 0; }
Tylko głupoty mi wypisuje |
|
orion Temat założony przez niniejszego użytkownika |
» 2012-01-16 15:33:40 Ok, już sobie poradziłem. Dzięki za wcześniejsza pomoc. |
|
« 1 » |