prog6.c
By: a guest | Mar 15th, 2010 | Syntax:
C++ | Size: 2.28 KB | Hits: 91 | Expires: Never
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/*
Regexp:
^[^#]_?(0)?[0-9]+V6.*[a-z]+.+qqriq(B|b)
Egyszerubben:
^[^#]_?[0-9]+V6.*[a-z]+.+qqriq(B|b)
*/
enum allapot {
start,
end,
nothashmark, // nem #
underline, // _
num, // [0-9]
v,
v6,
dot,
kar, // [a-z]
dot2,
q,
qq,
qqr,
qqri,
qqriq} a;
int main()
{
char ch;
int line = 0, regline = 0;
a = start;
while ((ch = getchar()) != EOF)
{
if(ch == '\n')
{
a = end;
}
switch(a)
{
case start:
if(ch == '#') a = end;
else a = nothashmark;
break;
case end:
while(ch != '\n')
{
ch = getchar();
}
a = start;
line++;
break;
case nothashmark:
if(ch == '_')
{
a = underline;
}
else if(isdigit(ch))
{
a = num;
}
else
{
a = end;
}
break;
case underline:
if(isdigit(ch))
{
a = num;
}
else
{
a = end;
}
break;
case num:
if(ch == 'V')
{
a = v;
}
else if (isdigit(ch))
{
a = num;
}
else
{
a = end;
}
break;
case v:
if(ch == '6')
{
a = v6;
}
else
{
a = end;
}
break;
case v6:
case dot:
if(islower(ch))
{
a = kar;
}
else
{
a = dot;
}
break;
case kar:
if(islower(ch))
{
a = kar;
}
else
{
a = dot2;
}
break;
break;
case dot2:
if(ch == 'q')
{
a = q;
}
else
{
a = dot2;
}
break;
case q:
if(ch == 'q')
{
a = qq;
}
else
{
a = dot2;
}
break;
case qq:
if(ch == 'r')
{
a = qqr;
}
else
{
a = dot2;
}
break;
case qqr:
if(ch == 'i')
{
a = qqri;
}
else
{
a = dot2;
}
break;
case qqri:
if(ch == 'q')
{
a = qqriq;
}
else
{
a = dot2;
}
break;
case qqriq:
if((ch == 'B') || (ch == 'b'))
{
regline++;
a = end;
}
else
{
a = dot2;
}
break;
}
}
printf("%o/%o\n", line, regline);
return 0;
}