Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.76 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6.  
  7. int verifcuv(char caz[11], char* cuvant, int pozcuv, char interv[11],int lungint, int* a)
  8. {
  9. int* i;
  10. i=a;
  11. char caz1[3]="";
  12. if(strlen(caz)>2)
  13. goto repeat;
  14. else
  15. {
  16. strcpy(caz1,caz);
  17. goto direct;
  18. }
  19. repeat:
  20. while(strlen(caz)>2)
  21. {
  22. strncpy(caz1,caz,2);
  23. strcpy(caz,caz+2);
  24. goto direct;
  25. }
  26. direct:
  27. if(strcmp(caz1,"LM")==0)
  28. {
  29. while(*i<=lungint)
  30. {
  31. if(cuvant[pozcuv]>=interv[*i]&&cuvant[pozcuv]<=interv[*i+1])
  32. {if(interv[*i+2])
  33. *i+=2;
  34. return 1;}
  35. *i+=2;
  36. }
  37. return 0;
  38. }
  39. else if(strcmp(caz1,"Lm")==0)
  40. {
  41. while(*i<=lungint)
  42. {
  43. if(cuvant[pozcuv]>=interv[*i]&&cuvant[pozcuv]<=interv[*i+1])
  44. {if(interv[*i+2])
  45. *i+=2;
  46. return 1;}
  47. *i+=2;
  48. }
  49. return 0;
  50. }
  51.  
  52. else if(strcmp(caz1,"CI")==0)
  53. {
  54. while(*i<=lungint)
  55. {
  56. if((cuvant[pozcuv]-'0')>=(interv[*i]-'0')&&(cuvant[pozcuv]-'0')<=(interv[*i+1]-'0'))
  57. {if(interv[*i+2])
  58. *i+=2;
  59. return 1;}
  60. *i+=2;
  61. }
  62. return 0;
  63. }
  64. else
  65. if(strcmp(caz1,"CS")==0)
  66. {
  67. if((cuvant[pozcuv]-'0')==(interv[0]-'0'))
  68. return 1;
  69. else
  70. return 0;
  71. }
  72. else
  73. if(strcmp(caz,"CM")==0)
  74. {
  75. while(*i<=lungint)
  76. if((cuvant[pozcuv]-'0')==(interv[*i++]-'0'))
  77. return 1;
  78. return 0;
  79.  
  80. }
  81. else
  82. return 0;
  83.  
  84. }
  85.  
  86.  
  87. void testare(char* cuvant,char* sablon)
  88. {
  89. int lungcuv=strlen(cuvant),lungsab=strlen(sablon);
  90. int isab=0,pozcuv=0;
  91. char interv[11]="";
  92. int lungint=-1;
  93. int corect=0,contor=0,nrlit=0,numar,mmc=0,a=0;
  94. char caz[11]="";
  95. while(isab<lungsab)
  96. {
  97. start:
  98. switch(sablon[isab])
  99. {
  100. case '[': {
  101.  
  102. isab++;
  103. caracter:
  104. if(sablon[isab]>64&&sablon[isab]<91)
  105. {
  106. isab++;
  107. if(sablon[isab]=='-'&&sablon[isab+1]>64&&sablon[isab+1]<91)
  108. {
  109. if(mmc=0)
  110. {
  111. lungint=-1;
  112. strcpy(caz,"LM");
  113. }
  114. else
  115. strcat(caz,"LM");
  116.  
  117. interv[++lungint]=sablon[isab-1];
  118. interv[++lungint]=sablon[isab+1];
  119. isab+=2;
  120. if(sablon[isab]!=']')
  121. {
  122. mmc=1;
  123. goto caracter;
  124. }
  125. else
  126. mmc=0;
  127. }
  128. }
  129. else if(sablon[isab]>96&&sablon[isab]<123)
  130. {
  131. isab++;
  132. if(sablon[isab]=='-'&&sablon[isab+1]>96&&sablon[isab+1]<123)
  133. {
  134. if(mmc=0)
  135. {
  136. lungint=-1;
  137. strcpy(caz,"Lm");
  138. }
  139. else
  140. strcat(caz,"Lm");
  141. //
  142. interv[++lungint]=sablon[isab-1];
  143. interv[++lungint]=sablon[isab+1];
  144. isab+=2;
  145. if(sablon[isab]!=']')
  146. {
  147. mmc=1;
  148. goto caracter;
  149. }
  150. else
  151. mmc=0;
  152. }
  153. }
  154. else if(sablon[isab]>47&&sablon[isab]<58)
  155. {
  156. isab++;
  157. if(sablon[isab]=='-'&&sablon[isab+1]>47&&sablon[isab+1]<58)
  158. {
  159. if(mmc=0)
  160. {
  161. lungint=-1;
  162. strcpy(caz,"CI");
  163. }
  164. else
  165. strcat(caz,"CI");
  166. interv[++lungint]=sablon[isab-1];
  167. interv[++lungint]=sablon[isab+1];
  168. isab+=2;
  169. if(sablon[isab]!=']')
  170. {
  171. mmc=1;
  172. goto caracter;
  173. }
  174. else
  175. mmc=0;
  176. }
  177. else if(sablon[isab]!='-')
  178. if(sablon[isab]==']')
  179. {
  180. strcpy(caz,"CS");
  181. lungint=-1;
  182. interv[++lungint]=sablon[isab-1];
  183. }
  184. else
  185. {
  186. isab--;
  187. strcpy(caz,"CM");
  188. lungint=-1;
  189. while(sablon[isab]!=']')
  190. {
  191. interv[++lungint]=sablon[isab++];
  192. }
  193.  
  194. }
  195. }
  196. }
  197. case ']':{
  198. if(sablon[isab+1]!='+'&&sablon[isab+1]!='*'&&sablon[isab+1]!='{')
  199. {
  200. corect=verifcuv(caz,cuvant,pozcuv,interv,lungint,&a);
  201.  
  202. if(corect==0)
  203. return;
  204. else
  205. pozcuv++;
  206. isab++;
  207. goto start;
  208. }
  209. else
  210. {
  211. isab++;
  212. goto start;
  213. }
  214. }
  215.  
  216. case '+':{
  217. contor++;
  218. do{
  219. corect=verifcuv(caz,cuvant,pozcuv,interv,lungint,&a);
  220. pozcuv++;
  221. }
  222. while(contor>=1&&corect==1);
  223. if(contor>=1)
  224. corect=1;
  225.  
  226. }
  227. case '{':{
  228. isab++;
  229. numar=1;
  230. do
  231. {
  232. nrlit=nrlit*10+(sablon[isab]-'0');
  233. isab++;
  234. }
  235. while(sablon[isab]!='}');
  236.  
  237. do
  238. {
  239. corect=verifcuv(caz,cuvant,pozcuv,interv,lungint,&a);
  240. pozcuv++;
  241. numar++;
  242. }while((numar<=nrlit)&&(corect==1));
  243. if(corect==0)
  244. return;
  245. isab++;
  246. nrlit=0;
  247. numar=1;
  248. goto start;
  249.  
  250.  
  251.  
  252. }
  253. default:{
  254.  
  255. if(((corect==0)||(corect==1))&&(lungcuv>pozcuv))
  256. return;
  257. else if((corect==1)&&(lungcuv<=pozcuv))
  258. {
  259. printf("%s\n",cuvant);
  260. return;
  261. }
  262. }
  263.  
  264. }
  265.  
  266. }
  267. }
  268.  
  269.  
  270. int main()
  271. {
  272.  
  273. testare("1R","[A-Z0-9]{2}");
  274. /*
  275. // nume
  276. testare("abcCb","[a-z]{3}[A-Z][a-z]"); //corect
  277. testare("abcCb","[a-z][A-Z][a-z]");
  278. testare("abcCC","[a-z]{3}[A-Z][A-Z]"); //corect
  279. testare("abcCb","[a-z]{3}[A-Z]{1}[a-z]"); //corect
  280. testare("aCb","[a-z][A-Z][a-z]+"); //corect
  281. */
  282. return 0;
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement