gpt4 book ai didi

c - DFA 不接受字符串

转载 作者:行者123 更新时间:2023-11-30 20:51:53 27 4
gpt4 key购买 nike

我的程序应该为二进制字符串实现 dfa...dfa 是一台一次只能处于一种状态的机器(当您输入字符串时,机器应该使用它,并且在最后一步它应该到达最终状态。如果是这样,我们说该字符串被机器接受)...这台机器是这样工作的:

首先程序询问状态数,如果你考虑我的图片,你会发现它有 3 个状态(q0,q1,q2),所以我们输入 3。然后它询问输入数。我的输入是 0,1 所以我输入 2...然后它要求输入输入,我们输入 0 然后 1!然后它询问最终状态的数量,这里的最终状态只有 q1...所以我们输入它...然后你看到这个: (q0,0) = q 这意味着 q0 进入哪个状态为 0...例如这里 q0 用 0 转到 q0 ...其他都是这样。填写完这部分后,我们输入字符串,它会显示字符串是否有效

这是代码:

   #include<stdio.h>
#include<conio.h>

int ninputs;

int check(char,int ); //function declaration
int dfa[10][10];
char c[10], string[10];

int main()
{
int nstates, nfinals;
int f[10];
int i,j,s=0,final=0;
printf("enter the number of states that your dfa consist of \n");
scanf("%d",&nstates); // 3
printf("enter the number of input symbol that dfa have \n");
scanf("%d",&ninputs); // 2
printf("\nenter input symbols\t");

for(i=0; i<ninputs; i++)
{
printf("\n\n %d input\t", i+1);
printf("%c",c[i]=getch()); // 01
}

printf("\n\nenter number of final states\t");
scanf("%d",&nfinals); // 1

for(i=0;i<nfinals;i++)
{
printf("\n\nFinal state %d : q",i+1);
scanf("%d",&f[i]); // 1
}

printf("-----------------------------------------------------------------------");
printf("\n\ndefine transition rule as (initial state, input symbol ) = final state\n");

for(i=0; i<ninputs; i++)
{
for(j=0; j<nstates; j++)
{
printf("\n(q%d , %c ) = q",j,c[i]);
scanf("%d",&dfa[i][j]);
// q(0,0)=0
// q(1,0)=0
// q(2,0)=2
// q(0,1)=1
// q(1,1)=2
// q(2,1)=1
}
}

do
{
i=0;
printf("\n\nEnter Input String.. ");
scanf("%s",string); // 01

while(string[i]!='\0')
{
if((s=check(string[i++],s))<0)
break;
for(i=0 ;i<nfinals ;i++)
{
if(f[i] ==s )
final=1;
if(final==1)
printf("\n valid string");
else
printf("invalid string");
getch();

printf("\nDo you want to continue.? \n(y/n) ");
}
}
}
while(getch()=='y');

getch();
}
int check(char b,int d)
{
int j;
for(j=0; j<ninputs; j++)
if(b==c[j])
return(dfa[d][j]);
return -1;
}

问题是,当我输入字符串时,程序说它无效,但机器应该接受它......例如,考虑照片中的机器并在其上测试此字符串:01

enter image description here

那么代码有什么问题吗?

最佳答案

优化了使用 DFA 接受字符串的 C 代码

#include<stdio.h>
#include<conio.h>
#include<string.h>

int main()
{
int a,b,i,j,k,state,ch;
char s[10][10],*st,v[10],ss[10];
printf("Enter the number of state:\n");
scanf("%d",&a);
printf("Enter State :\n");
for(i=0;i<a;i++)
{
fflush(stdin);
scanf("%c",&ss[i]);
}
printf("Enter th no. of var..:\n");
scanf("%d",&b);
printf("Enter variable :\n");
for(i=0;i<b;i++)
{
fflush(stdin);
scanf("%c",&v[i]);
}
printf("Enter table:\n");
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
fflush(stdin);
scanf("%c",&s[i][j]);
}
}
printf("Enter string :\n");
fflush(stdin);
gets(st);
i=0;
state=0;
while(st[i]!='\0')
{
for(j=0;j<b;j++)
{
if(st[i]==v[j])
{
if(s[state][j]=='-')
{
goto check;
}
else
{
for(k=0;k<a;k++)
{
if(s[state][j]==ss[k])
{
printf("State:%c\n",s[state][j]);
state=k;
goto o;
}
}
}
o:
}
}
i++;
}
check:
ch=1;
for(i=0;i<b;i++)
{
if(s[state][i]!='-')
{
ch=0;
}
}
if(ch==1)
{
printf("String is matching..");
}
else
{
printf("String is not matching..");
}
getch();
return 0;
}

关于c - DFA 不接受字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24232575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com