#include #include #include #include using namespace std; #define MAX_STRING_ELMENT_VALUE 255 void main() { //ilegal operator/bracket combinations // std::map disallowedcomb; char disallowedcomb[MAX_STRING_ELMENT_VALUE][MAX_STRING_ELMENT_VALUE]; //better use a map to save space memset(disallowedcomb,0,sizeof(char)*MAX_STRING_ELMENT_VALUE*MAX_STRING_ELMENT_VALUE); disallowedcomb['+'][')']=1; // disallowedcomb['(']['+']=1; disallowedcomb['+']['}']=1; // disallowedcomb['{']['+']=1; disallowedcomb['+'][']']=1; // disallowedcomb['[']['+']=1; disallowedcomb['-'][')']=1; // disallowedcomb['(']['-']=1; disallowedcomb['-']['}']=1; // disallowedcomb['{']['-']=1; disallowedcomb['-'][']']=1; // disallowedcomb['[']['-']=1; disallowedcomb['*'][')']=1; // disallowedcomb['(']['*']=1; disallowedcomb['*']['}']=1; // disallowedcomb['{']['*']=1; disallowedcomb['*'][']']=1; // disallowedcomb['[']['*']=1; disallowedcomb['/'][')']=1; disallowedcomb['(']['/']=1; disallowedcomb['/']['}']=1; disallowedcomb['{']['/']=1; disallowedcomb['/'][']']=1; disallowedcomb['[']['/']=1; char parant_type_open[MAX_STRING_ELMENT_VALUE]; memset(parant_type_open,0,sizeof(char)*MAX_STRING_ELMENT_VALUE); char parant_type_close[MAX_STRING_ELMENT_VALUE]; memset(parant_type_close,0,sizeof(char)*MAX_STRING_ELMENT_VALUE); parant_type_open['(']=1; parant_type_close[')']=1; parant_type_open['[']=1; parant_type_close[']']=1; parant_type_open['{']=1; parant_type_close['}']=1; char parant_matches[MAX_STRING_ELMENT_VALUE]; memset(parant_matches,0,sizeof(char)*MAX_STRING_ELMENT_VALUE); parant_matches[')']='('; // parant_matches['(']=')';//may not seem corect but we do not care :P // parant_matches['{']='}'; parant_matches['}']='{'; // parant_matches['[']=']'; parant_matches[']']='['; int cur_depth_type[100000]; //ok ez helyett 1 lista kell ! int depth_ind=0; char Zstring[10000]; strcpy(Zstring,"(1+2)+3+(4-"); for(size_t i=0;i0) { if(cur_depth_type[depth_ind-1]!=parant_matches[Zstring[i]]) printf("we are trying to close a paranthese that has not been opened yet\n"); else depth_ind--; } else printf("trying to close a paranthese but none were opened yet\n"); } } if(depth_ind) printf("not all parantheses weere closed\n"); int temp=strlen(Zstring); if(temp>0) { temp--; if( Zstring[temp]=='+' || Zstring[temp]=='*' || Zstring[temp]=='/' || Zstring[temp]=='-' ) printf("String terminates in operator, not alowed\n"); } printf("finished testing string\n"); char c=getch(); }