📄 leihanghang.c
字号:
/* checkp-lei.C -- check dfa */
#include "stdio.h"
#include "conio.h"
# include <stdlib.h>
#define Q0 0
#define Q1 1
#define Q2 2
#define Q3 3
#define ERROR 4
/*四种状态用数字来标表示
q0----0
q1----1
q2----2
q3----3
错误标识:
输入错----4
调用一个函数进行判断当前的数据是否是符合语法
*/
typedef char DataType;
typedef struct node
{
DataType cdata;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
/*创建链表*/
LinkList CreateList()
{
char ch;
ListNode *s,*r;
head=(LinkList)malloc(sizeof(ListNode));
r=head;
head->cdata='*';
while((ch=getchar())!='\n')
{
s=(LinkList)malloc(sizeof(ListNode));
s->cdata=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
/*取得第i个结点*/
ListNode * getNode(int i)
{
int j=0;
ListNode *p;
p=head;
while(p->next!=NULL)
{
p=p->next;
j++;
if(j==i)
{
return p;
}
}
return NULL;
}
/*清除链表*/
void freeList()
{
int j=0;
ListNode *p,*r;
p=head;
while(p->next!=NULL)
{
r=p->next;
free(p);
p=r;
}
free(p);
}
/*打印链表*/
void printList()
{
ListNode *p;
int i=0;
if(head!=NULL)
{
p=head;
while(p->next!=NULL)
{
p=p->next;
printf("node[%d]=%c\n",i,p->cdata);
i++;
}
}
}
/*检查输入*/
long checkq(char a,int q)
{
long lflag=ERROR;
if(a=='0')
{
switch(q)
{
case Q0: lflag=Q2;break;
case Q1: lflag=Q3;break;
case Q2: lflag=Q0;break;
case Q3: lflag=Q1;break;
default: lflag=ERROR;break;
}
}
else if(a=='1')
{
switch(q)
{
case Q0: lflag=Q1;break;
case Q1: lflag=Q0;break;
case Q2: lflag=Q3;break;
case Q3: lflag=Q2;break;
default: lflag=ERROR;break;
}
}
return lflag;
}
void checks()
{
long lflag,lstate,i;
ListNode *p;
lstate=Q0;/*开始状态:5*/
i=1;
p=head;
while((p=getNode(i))!=NULL)
{
lflag=checkq(p->cdata,lstate);
lstate=lflag;
/* printf("%c,%d\n",p->cdata,lflag);*/
if(lflag<Q0||lflag>Q3)
{
lflag=ERROR;
break;
}
i++;
}
if(lflag==Q0)
printf("data input can be received\n");
else
printf("data input can not be received\n");
}
main()
{
char ch;
printf("please input data such as 0 or 1,input enter is over\n");
do{
CreateList();
/*printList();*/
checks();
printf("\n\n\n\n");
printf("please input q or Q for quit,anyone else will be checked again!\n");
ch=getch();
if(ch=='q'||ch=='Q')
break;
clrscr();
printf("please input data such as 0 or 1,input enter is over\n");
freeList();
}while(1);
free(p);
printf("\n\n");
printf("press any key to quit\n");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -