Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- int verifcuv(char caz[11], char* cuvant, int pozcuv, char interv[11],int lungint, int* a)
- {
- int* i;
- i=a;
- char caz1[3]="";
- if(strlen(caz)>2)
- goto repeat;
- else
- {
- strcpy(caz1,caz);
- goto direct;
- }
- repeat:
- while(strlen(caz)>2)
- {
- strncpy(caz1,caz,2);
- strcpy(caz,caz+2);
- goto direct;
- }
- direct:
- if(strcmp(caz1,"LM")==0)
- {
- while(*i<=lungint)
- {
- if(cuvant[pozcuv]>=interv[*i]&&cuvant[pozcuv]<=interv[*i+1])
- {if(interv[*i+2])
- *i+=2;
- return 1;}
- *i+=2;
- }
- return 0;
- }
- else if(strcmp(caz1,"Lm")==0)
- {
- while(*i<=lungint)
- {
- if(cuvant[pozcuv]>=interv[*i]&&cuvant[pozcuv]<=interv[*i+1])
- {if(interv[*i+2])
- *i+=2;
- return 1;}
- *i+=2;
- }
- return 0;
- }
- else if(strcmp(caz1,"CI")==0)
- {
- while(*i<=lungint)
- {
- if((cuvant[pozcuv]-'0')>=(interv[*i]-'0')&&(cuvant[pozcuv]-'0')<=(interv[*i+1]-'0'))
- {if(interv[*i+2])
- *i+=2;
- return 1;}
- *i+=2;
- }
- return 0;
- }
- else
- if(strcmp(caz1,"CS")==0)
- {
- if((cuvant[pozcuv]-'0')==(interv[0]-'0'))
- return 1;
- else
- return 0;
- }
- else
- if(strcmp(caz,"CM")==0)
- {
- while(*i<=lungint)
- if((cuvant[pozcuv]-'0')==(interv[*i++]-'0'))
- return 1;
- return 0;
- }
- else
- return 0;
- }
- void testare(char* cuvant,char* sablon)
- {
- int lungcuv=strlen(cuvant),lungsab=strlen(sablon);
- int isab=0,pozcuv=0;
- char interv[11]="";
- int lungint=-1;
- int corect=0,contor=0,nrlit=0,numar,mmc=0,a=0;
- char caz[11]="";
- while(isab<lungsab)
- {
- start:
- switch(sablon[isab])
- {
- case '[': {
- isab++;
- caracter:
- if(sablon[isab]>64&&sablon[isab]<91)
- {
- isab++;
- if(sablon[isab]=='-'&&sablon[isab+1]>64&&sablon[isab+1]<91)
- {
- if(mmc=0)
- {
- lungint=-1;
- strcpy(caz,"LM");
- }
- else
- strcat(caz,"LM");
- interv[++lungint]=sablon[isab-1];
- interv[++lungint]=sablon[isab+1];
- isab+=2;
- if(sablon[isab]!=']')
- {
- mmc=1;
- goto caracter;
- }
- else
- mmc=0;
- }
- }
- else if(sablon[isab]>96&&sablon[isab]<123)
- {
- isab++;
- if(sablon[isab]=='-'&&sablon[isab+1]>96&&sablon[isab+1]<123)
- {
- if(mmc=0)
- {
- lungint=-1;
- strcpy(caz,"Lm");
- }
- else
- strcat(caz,"Lm");
- //
- interv[++lungint]=sablon[isab-1];
- interv[++lungint]=sablon[isab+1];
- isab+=2;
- if(sablon[isab]!=']')
- {
- mmc=1;
- goto caracter;
- }
- else
- mmc=0;
- }
- }
- else if(sablon[isab]>47&&sablon[isab]<58)
- {
- isab++;
- if(sablon[isab]=='-'&&sablon[isab+1]>47&&sablon[isab+1]<58)
- {
- if(mmc=0)
- {
- lungint=-1;
- strcpy(caz,"CI");
- }
- else
- strcat(caz,"CI");
- interv[++lungint]=sablon[isab-1];
- interv[++lungint]=sablon[isab+1];
- isab+=2;
- if(sablon[isab]!=']')
- {
- mmc=1;
- goto caracter;
- }
- else
- mmc=0;
- }
- else if(sablon[isab]!='-')
- if(sablon[isab]==']')
- {
- strcpy(caz,"CS");
- lungint=-1;
- interv[++lungint]=sablon[isab-1];
- }
- else
- {
- isab--;
- strcpy(caz,"CM");
- lungint=-1;
- while(sablon[isab]!=']')
- {
- interv[++lungint]=sablon[isab++];
- }
- }
- }
- }
- case ']':{
- if(sablon[isab+1]!='+'&&sablon[isab+1]!='*'&&sablon[isab+1]!='{')
- {
- corect=verifcuv(caz,cuvant,pozcuv,interv,lungint,&a);
- if(corect==0)
- return;
- else
- pozcuv++;
- isab++;
- goto start;
- }
- else
- {
- isab++;
- goto start;
- }
- }
- case '+':{
- contor++;
- do{
- corect=verifcuv(caz,cuvant,pozcuv,interv,lungint,&a);
- pozcuv++;
- }
- while(contor>=1&&corect==1);
- if(contor>=1)
- corect=1;
- }
- case '{':{
- isab++;
- numar=1;
- do
- {
- nrlit=nrlit*10+(sablon[isab]-'0');
- isab++;
- }
- while(sablon[isab]!='}');
- do
- {
- corect=verifcuv(caz,cuvant,pozcuv,interv,lungint,&a);
- pozcuv++;
- numar++;
- }while((numar<=nrlit)&&(corect==1));
- if(corect==0)
- return;
- isab++;
- nrlit=0;
- numar=1;
- goto start;
- }
- default:{
- if(((corect==0)||(corect==1))&&(lungcuv>pozcuv))
- return;
- else if((corect==1)&&(lungcuv<=pozcuv))
- {
- printf("%s\n",cuvant);
- return;
- }
- }
- }
- }
- }
- int main()
- {
- testare("1R","[A-Z0-9]{2}");
- /*
- // nume
- testare("abcCb","[a-z]{3}[A-Z][a-z]"); //corect
- testare("abcCb","[a-z][A-Z][a-z]");
- testare("abcCC","[a-z]{3}[A-Z][A-Z]"); //corect
- testare("abcCb","[a-z]{3}[A-Z]{1}[a-z]"); //corect
- testare("aCb","[a-z][A-Z][a-z]+"); //corect
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement