#include <stdio.h> typedef struct { int state; int changed; int c; } state_mach; enum states { before, inside, after } e_states; int hop2state(state_fsm *fsm, int state) { fsm->state = state; fsm->changed = 1; return 1; } int setState(state_mach *fsm) { if (fsm->c == ‘\n‘) return hop2state(fsm, before); switch(fsm->state) { case before: if (fsm->c!=‘ ‘) return hop2state(fsm, inside); break; case inside: if (fsm->c == ‘ ‘) return hop2state(fsm, after); else return hop2state(fsm, inside); break; case after: break; } return 0; } int doAction(state_mach *fsm) { switch (fsm->state) { case before: putchar(‘\n‘); break; case inside: putchar(fsm->c); break; } return 0; } int main() { state_mach fsm = {before, 0, 0}; while((fsm.c = getchar())!= EOF) { if (setState(&fsm)) { fsm.changed = 0; doAction(&fsm); } } }
原文:http://www.cnblogs.com/jiangli/p/3554131.html