感谢回复!
但是这个程序我有几处很不懂的,这个程序是老师给的,有关字符串的识别过程的。如下:
/*FA program */
#include<stdio.h>
int in(int s,int z)
//结束状态判断部分;程序 判断当前状态是否是结束状态,若是则返回标志1,否则返回0.
{
if (s==z)
{
printf(" 3\n look!the last status belongs to Z!");
return 1;
}
else return 0;
}
int step(int s,char t)//状态转换设置部分:共有四种状态:0,1,2,3
{
if (t=='a')
//判断输入符号'a'时,如果符合状态0,则返回1,其他返回3,1,3等等。
switch(s)
{
case 0:return 1;
case 1:return 3;
case 2:return 1;
case 3:return 3;
}
else if (t=='b')
//判断输入符号'b'时,如符合状态0,则返回2,其他依此类推。
switch(s)
{
case 0:return 2;
case 1:return 2;
case 2:return 3;
case 3:return 3;
}
}
int realize(char * input)
// 输入符号串识别部分——自动机的构造过程;用循环语句来进行多个符号的输入和判断。
{
int z=3;
int s,i;
s=0;
for (i=0;input[i]!='\n';i++)
{
printf("%2d",s);
s=step(s,input[i]);}
if(in(s,z))
return 1;
else return 0;
}
main()
//主程序将输入符号、自动机的状态、输出结果打印在屏幕上。
{
int i;
int a;
char input[40];
printf("FA=({0,1,2,3},{a,b},M,0,{3})\n");
printf("M:\n");
printf("
M(0,a)=1
M(0,b)=2\n");
printf("
M(1,a)=3
M(1,b)=2\n");
printf("
M(2,a)=1
M(2,b)=3\n");
printf("
M(3,a)=3
M(3,b)=3\n");
printf("please enter your string which is to be checked:\n");
lop:for(i=0;input[i-1]!='\n';i++)
scanf("%c",&input[i]);//将输入的单个字符传给input[i]
for(i=0;input[i-1]!='\n';i++)
if (input[i]!='a'&&input[i]!='b'&&input[i]!='\n')
{
printf("input error,enter again please:\n");
goto lop;
}
printf("the status sequence is:\n");
a=realize(input);
if(a==1)
printf("\n So this string can be identified,\n");
else printf("\n This string can't be identified,\n");
printf(" press enter to exit the program.\n");
getchar();
}
我的问题是:
(1)那个char input[40]貌似没什么用啊,就是比如说我设置成char input[4];它照样也能识别babbbbbb
(2)还是那个for循环的结束条件,实在弄不明白