Code:
int main( void)
{
int state, next, c, out;
setbuf( stdout, 0); /* make stdout unbuffered */
next = START; /* set initial state */
while( 1)
{
/* get next input */
c = getchar(); if( c < 0) break;
if( c != '0' && c != '1') continue; /* skip bad inputs */
state = next; /* get next state */
out = c; /* set default output */
switch( state)
{
case START:
if( c == '1') next = SAW_1;
else next = START;
break;
case SAW_1:
if( c == '0') next = SAW_10;
else next = SAW_1;
break;
case SAW_10:
if( c == '0') next = SAW_100;
else next = SAW_1;
break;
case SAW_100:
if( c == '1') next = SAW_1001;
else next = START;
break;
case SAW_1001:
if( c == '0') next = SAW_10010;
else next = SAW_1;
break;
case SAW_10010:
if ( c == '1'){out = 'S'; next = START;}
else next = START;
break;
}
printf( "%c", out);
}
putchar( '\n');
return 0;
}