答案不标准也不一定是最佳,仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _STATE
{
char data;
struct _STATE *zero;//指向0跳转的下一个状态
struct _STATE *one;//指向0跳转的下一个状态
}STATE,*pSTATE;
STATE charState[8];//八种状态
STATE beginNode;
void InitStateMachine(STATE charState[])
{
charState[0].data='A';
charState[1].data='B';
charState[2].data='C';
charState[3].data='D';
charState[4].data='E';
charState[5].data='F';
charState[6].data='G';
charState[7].data='H';
charState[4].one=&charState[0];
charState[4].zero=&charState[2];
charState[0].one=&charState[2];
charState[0].zero=&charState[1];
charState[1].one=&charState[5];
charState[1].zero=&charState[3];
charState[2].one=&charState[3];
charState[2].zero=&charState[3];
charState[3].one=&charState[6];
charState[3].zero=&charState[7];
charState[5].one=NULL;
charState[5].zero=NULL;
charState[6].one=&charState[4];
charState[6].zero=&charState[4];
charState[7].one=&charState[5];
charState[7].zero=&charState[5];
beginNode.data=0;
beginNode.one=&charState[0];
beginNode.zero=&charState[2];
}
void StateMachine(const char *pStates,char *pOutput)
{
pSTATE p=&beginNode;
unsigned int length = strlen(pStates),i;
for(i=0 ; i<length ; i++)
{
if(pStates[i] == '0')
{
if(p->zero == NULL)
{
printf("/n");
return;
}
p=p->zero;
printf("%c",p->data);
}
else
{
if(pStates[i] == '1')
{
if(p->one == NULL)
{
printf("/n");
return;
}
p=p->one;
printf("%c",p->data);
}
}
}
printf("/n");
}
void main()
{
char States[50],Output[50];
InitStateMachine(charState);
printf("请输入01字串(最长50个字符) :");
scanf("%s",States);
StateMachine(States,Output);
}
完整内容所在目录:http://www.mythroad.net/tag/q_written_examination_and_interview_code_title/