1、则:1、 空表达式不是合适公式的表达式。返回 NO2、 单独的一个符号是一个公式时,当且仅当此符号为命题符号3、 如果U的长度大于1,贝U U必须以“(”开头,否则不是合式公式,返回 NO。(1) 如果U的第二个符号为一个表示否定的“” ,则U必须是可以匹配(V)模式, 其中V是一个表达式。否则U不是合式公式,即U是合式公式当且仅当 V是合式公式。 于是,递归判断 V是否为合式公式,转入 1、重头开始判断。(2) 如果U的第二个符号不是“” 。则U 定要符合(A*B )模式。1对U从左向右扫描,遇到“ (A”停止,其中A是一个含有相同数目的“(”和“)”的表达式,如果没有,则 U不是合式公式,
2、返回 NO。2对U从右向左扫描,遇到“ B)”停止,其中B是一个含有相同数目“(”和“)”的表达式,如果没有,则 U不是合式公式,返回 NO。3验证(A*B )的“ * ”是否是“A” ,“V”,“ ? ”四种之一,如果不是,则 U不是合式公式,返回 NO。4递归判断A,B是否为合式公式,转入 1、重头开始判断三、程序代码#include string.hstdlib.hvoid check( char *str1);int main( void )int index = 1 ;int keyNum = 1 ;static char str in g50;/友好界面,循环使用判断while (
3、 index != 0 )printf( 欢迎使用合式公式判断系统n);printf(合式公式()不可以省略n用-表示非n用 * 表示与 A n用 + 表示或 V n用 表示蕴涵Tn”);用表示等值 n请输入您要判断识别的字符串:nscanf( %s,&string);check(str in g);请选择:0-退出系统;1-继续判断其它字符串nsca nf( %d, & keyNum );if (keyNum = 0)break ;else continue ;/合式公式字符串的判读void check( char *str1)char formal50;int len 二 0;/获取字符串
4、的长度并且去除空格while ( *str1 != 0)if (*str1 !formalle n二 *str1;len+;str1+;formalle n = ;字符串 st有效长度:dn ,formal,len);/空字符串不是合式公式if (len = 0)字符串为空ntttNO!tt 该字符串不是合式公式return ;/单独的一个符号是一个公式时,当且仅当次符号为命题符号else if (len = 1)if (!isalpha(formal0)字符串环是合适字母ntttNO!tt 该字符串不是合式公式n formal);elsetttYES!tt 字符串 %s 是合式公式 nret
5、urn/如果U的长度大于,则U必须以(”幵头,否则不是合式公式,返回NOif ( (formal0 !( ) | (formallen-1 !)字符串%s没有以“”幵始或者以“”结束ntttNO!tt 该字符串不是合式公式n/如果U的第二个符号为一个表示否定的 二”,则U必须是可以匹配(V)模式if (formal1= -char n ewstri ng50;int i = 0;for (i = 0; i len - 3; i+)n ewstri ngi = formal2+i;n ewstr in gi = check(newstring); /递归判断V是否为合式公式/如果U的第二个符号不
6、是二”。则U一定要符合(A*B)模式。int j = 0;int max1 = 0;int max2 = 0;int aindex = 0;int bindex = 0;int prenum = 0;int rear num = 0;char Astri ng50;char Bstri ng50;/对U从左向右扫描,遇到(A”停止,其中A是一个含有相同数目的“(”和)”的表达式for (j = 0; j = 0; j-)rear nu m+;max2+;rear num-;if (rearnum = 1)bin dex = j;if (rearnum = 0 & max2 = 1)字符串s中没
7、有扫描到 B) ntttNO!/截取新的短的字符串Bif (max2 = 1)Bstri ng0 = formalle n-2;Bstri ng1 = (bindex + j) |/递归判断A, B是否为合式公式check(Astri ng);check(Bstr in g);字符串% s中连接符不对ntttNO!if (aindex != bindex - 2)if (maxi != 1 & max2 !=1 )字符串% $中(A*B)不对if ( formalaindex + 1 = formalaindex + 1 = formalaindex + 1= )/如果不是,则U不是合式公式,返回NO字符串%s中(A*B)模式不对 该字符串不是合式公式n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1