Share Pastebin
Guest
Public paste!

prog6.c

By: a guest | Mar 15th, 2010 | Syntax: C++ | Size: 2.28 KB | Hits: 91 | Expires: Never
Copy text to clipboard
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. /*
  6. Regexp:
  7.  
  8. ^[^#]_?(0)?[0-9]+V6.*[a-z]+.+qqriq(B|b)
  9.  
  10. Egyszerubben:
  11. ^[^#]_?[0-9]+V6.*[a-z]+.+qqriq(B|b)
  12. */
  13.  
  14. enum allapot {
  15.         start,
  16.         end,
  17.         nothashmark,            // nem #
  18.         underline,              // _
  19.         num,                    // [0-9]
  20.         v,
  21.         v6,
  22.         dot,
  23.         kar,    // [a-z]
  24.         dot2,
  25.         q,
  26.         qq,
  27.         qqr,
  28.         qqri,
  29.         qqriq} a;
  30.  
  31. int main()
  32. {
  33.  
  34.         char ch;
  35.         int line = 0, regline = 0;
  36.         a = start;
  37.         while ((ch = getchar()) != EOF)
  38.         {
  39.                 if(ch == '\n')
  40.                 {
  41.                         a = end;
  42.                 }
  43.                 switch(a)
  44.                 {
  45.                         case start:
  46.                                 if(ch == '#') a = end;
  47.                                 else a = nothashmark;
  48.                                 break;
  49.                         case end:
  50.                                 while(ch != '\n')
  51.                                 {
  52.                                         ch = getchar();
  53.                                 }
  54.                                 a = start;
  55.                                 line++;
  56.                                 break;
  57.                         case nothashmark:
  58.                                 if(ch == '_')
  59.                                 {
  60.                                         a = underline;
  61.                                 }
  62.                                 else if(isdigit(ch))
  63.                                 {
  64.                                         a = num;
  65.                                 }
  66.                                 else
  67.                                 {
  68.                                         a = end;
  69.                                 }
  70.                                 break;
  71.                         case underline:
  72.                                 if(isdigit(ch))
  73.                                 {
  74.                                         a = num;
  75.                                 }
  76.                                 else
  77.                                 {
  78.                                         a = end;
  79.                                 }
  80.                                 break;
  81.                         case num:
  82.                                 if(ch == 'V')
  83.                                 {
  84.                                         a = v;
  85.                                 }
  86.                                 else if (isdigit(ch))
  87.                                 {
  88.                                         a = num;
  89.                                 }
  90.                                 else
  91.                                 {
  92.                                         a = end;
  93.                                 }
  94.                                 break;
  95.                         case v:
  96.                                 if(ch == '6')
  97.                                 {
  98.                                         a = v6;
  99.                                 }
  100.                                 else
  101.                                 {
  102.                                         a = end;
  103.                                 }
  104.                                 break;
  105.                         case v6:
  106.                         case dot:
  107.                                 if(islower(ch))
  108.                                 {
  109.                                         a = kar;
  110.                                 }
  111.                                 else
  112.                                 {
  113.                                         a = dot;
  114.                                 }
  115.                                 break;
  116.                        
  117.                         case kar:
  118.                                 if(islower(ch))
  119.                                 {
  120.                                         a = kar;
  121.                                 }
  122.                                 else
  123.                                 {
  124.                                         a = dot2;
  125.                                 }
  126.                                 break;
  127.                         break;
  128.                         case dot2:
  129.                                 if(ch == 'q')
  130.                                 {
  131.                                         a = q;
  132.                                 }
  133.                                 else
  134.                                 {
  135.                                         a = dot2;
  136.                                 }
  137.                                 break;
  138.                         case q:
  139.                                 if(ch == 'q')
  140.                                 {
  141.                                         a = qq;
  142.                                 }
  143.                                 else
  144.                                 {
  145.                                         a = dot2;
  146.                                 }
  147.                                 break;
  148.                         case qq:
  149.                                 if(ch == 'r')
  150.                                 {
  151.                                         a = qqr;
  152.                                 }
  153.                                 else
  154.                                 {
  155.                                         a = dot2;
  156.                                 }
  157.                                 break;
  158.                         case qqr:
  159.                                 if(ch == 'i')
  160.                                 {
  161.                                         a = qqri;
  162.                                 }
  163.                                 else
  164.                                 {
  165.                                         a = dot2;
  166.                                 }
  167.                                 break;
  168.                         case qqri:
  169.                                 if(ch == 'q')
  170.                                 {
  171.                                         a = qqriq;
  172.                                 }
  173.                                 else
  174.                                 {
  175.                                         a = dot2;
  176.                                 }
  177.                                 break;
  178.                         case qqriq:
  179.                                 if((ch == 'B') || (ch == 'b'))
  180.                                 {
  181.                                         regline++;
  182.                                         a = end;
  183.                                 }
  184.                                 else
  185.                                 {
  186.                                         a = dot2;
  187.                                 }
  188.                                 break;
  189.                 }
  190.         }
  191.         printf("%o/%o\n", line, regline);
  192.  
  193.         return 0;
  194. }