Nawiasy

0

Czy ktoś może mi pomóc w napisaniu tego programiku w C++

Potraktować łańcuch jako zapis jakiegoś wyrażenia matematycznego i sprawdzić poprawność użytej w nim sekwencji nawiasów (tylko okrągłych). Inne znaki zignorować. Sekwencja jest poprawna, jeśli zawiera tyle samo nawiasów otwierających co zamykających i jeśli nigdy nie występuje w niej nawias zamykający bez odpowiadającego mu występującego wcześniej nawiasu otwierającego. Podać, na której pozycji w łańcuchu (ewentualnie będzie to koniec łańcucha) wystąpił znak, który spowodował, że sekwencja nawiasów nie jest poprawna.

0
AnsiString a = Edit1->Text;
 int s = a.Length();
 int n = 0;
 for (int i=1; i<=s; i++)
 {n+=(a[i]=='(')?1:(a[i]==')')?-1:0;
  if (n<0)
  {ShowMessage("error at " + IntToStr(i));
   break;
  }
 }
 if (n>0)
  ShowMessage("za dużo '('");
0
#include <stdio.h>
int sprawdz(char* s){
  if(!s)return -2;    //brak ciagu
  if(!s[0])return -3; //ciag pusty
  int i=-1,j=0;
  while(s[++i])
    if((j+=((s[i]=='(')-(s[i]==')')))<0)return i;
  return (j?i:-1);
}

main(){
  char* dobrze="((5+3)*(8-1))";
  char* zle1  ="(-1))";
  char* zle2  ="(abc)(";
  char* zle3  =")(0)";
  printf("%d \n",sprawdz(dobrze));
  printf("%d \n",sprawdz(zle1));
  printf("%d \n",sprawdz(zle2));
  printf("%d \n",sprawdz(zle3));
  return 0;
}

Zwraca -1 gdy jest ok, -2 i -3 gdy brak ciagu lub cia pusty. 0..strlen(s)-1 gdy bledny nawias, strlen(s) gdy nie zostal jakis nawias domkniety.

// ehh marooned, bylbym pierwszy gdyby nie obiad ;p

0

A ja to zwykle robie rozpisujac gramatyke:
<wyr> ::= '(' <wyr> ')'
<wyr> ::= <znak_inny_niz_nawias>
standardowymi metodami.... :P

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