hftest6
By: a guest | Mar 15th, 2010 | Syntax:
C | Size: 2.84 KB | Hits: 76 | Expires: Never
#include <stdio.h>
#include <stdlib.h>
/*
A regularis kifejezes:
^[^#]_?(0)*[0-9]+V6.+[A-Z]*.+mmese(A|b)
Egyszerusitve:
^[^#]_?[0-9]+V6..+mmese(A|b)
*/
enum allapot {
start,
end,
nothashmark, // nem #
underline, // _
num, // [0-9]
v,
v6,
dot,
dot2,
m,
mm,
mme,
mmes,
mmese,
mmeseaorb} a;
int main()
{
char ch;
int line = 0, regline = 0;
a = start;
while((ch=getchar()) != EOF)
{
switch(a)
{
case start:
if((ch == '#') || (ch == '\n'))
{
a=end;
}
else
{
a = nothashmark;
}
break;
case end:
if(ch == '\n')
{
a = start;
line++;
}
else
{
a = end;
}
break;
case nothashmark:
if(ch == '_')
{
a = underline;
}
else if((ch >= '0') && (ch <= '9'))
{
a = num;
}
else
{
a = end;
}
break;
case underline:
if((ch >= '0') && (ch <= '9'))
{
a = num;
}
else
{
a = end;
}
break;
case num:
if(ch == 'V')
{
a = v;
}
else if((ch >= '0') && (ch <= '9'))
{
a = num;
}
else
{
a = end;
}
break;
case v:
if(ch == '6')
{
a = v6;
}
else
{
a = end;
}
break;
case v6:
if(ch == '\n')
{
a = end;
}
else
{
a = dot;
}
break;
case dot:
if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case dot2:
if(ch == 'm')
{
a = m;
}
else if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case m:
if(ch == 'm')
{
a = mm;
}
else if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case mm:
if(ch == 'e')
{
a = mme;
}
else if(ch == 'm')
{
a = mm;
}
else if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case mme:
if(ch == 's')
{
a = mmes;
}
else if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case mmes:
if(ch == 'e')
{
a = mmese;
}
else if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case mmese:
if((ch == 'A') || (ch == 'b'))
{
a = mmeseaorb;
}
else if(ch == '\n')
{
a = end;
}
else
{
a = dot2;
}
break;
case mmeseaorb:
if(ch == '\n')
{
regline++;
a = start;
}
if(ch == 'm')
{
a = m;
}
else
{
a = dot2;
}
break;
}
}
printf("%o/%o\n", line, regline);
return 0;
}