Patternsuche: Implementierung in C

Zum Vergleich Automat/Schaltwerk in Soft- und Hardware

#include <stdio.h>  
enum states {S0=0, S1,S2,S3,S4};  
enum pattern {a=0, b,c,d,e,others};  
enum pattern char2pat(int);  

void main(void)  
{  
    int ch;  
    enum pattern z;  
    enum states current = S0; // S0 ist Anfangszustand  
    enum states next;

    // Zustandstabelle
    enum states state_tab[5][6] =  {
           {S1,S0,S0,S0,S0,S0},
           {S1,S4,S0,S2,S0,S0},
           {S1,S0,S0,S0,S3,S0},
           {S1,S0,S0,S0,S0,S0},
           {S1,S0,S4,S0,S3,S0}  
    };

    while((ch = fgetc(stdin)) != EOF){
        z = char2pat(ch);
        next = state_tab[current][z];
        current = next;
        if(current == S3) 
            printf("Pattern Found \n");
    }
}

enum pattern char2pat(int ch)
{
    switch(ch){
        case 'a': return (enum pattern)a;
            case 'b': return (enum pattern)b;
            case 'c': return (enum pattern)c;
            case 'd': return (enum pattern)d;
            case 'e': return (enum pattern)e;
            default: return (enum pattern)others;
    }
}