?? 文法識別.cpp
字號:
//寫一程序識別字符串a((a|b)*|ab*a)*b
#include<iostream.h>
int isloop1(char *str)//找出連續b的序列。
{
char *p=str;
int sum=0;
if(*p=='b')
{
sum++;
p++;
return sum+isloop1(p);
}
return 0;
}
int isloop2(char *str)//找處連續(a|b)序列
{
char *p=str;
int sum=0;
if(*p=='(')
{
if(*(p+1)=='a'||*(p+1)=='b')
if(*(p+2)==')')
{
sum+=3;
p+=3;
return sum+isloop2(p);
}
}
return 0;
}
int isloop3(char *str)//找處連續((a|b)*|ab*a))序列。
{
char *p=str;
int sum=0;
if(*p=='(')
{
p++;
sum++;
if(*p=='a')
{
p++;
sum++;
int s=isloop1(p);
if(s==0)
return 0;
p+=s;
sum+=s;
if(*p=='a')
{
p++;
sum++;
if(*p==')')
{
p++;
sum++;
return sum+isloop3(p);
}
}
}
else
if(*p=='(')
{
int s=isloop2(p);
if(s==0)
return 0;
p+=s;
sum+=s;
if(*p==')')
{
sum++;
p++;
return sum+isloop3(p);
}
}
}
return 0;
}
void main()
{
char str[100];
cout<<"請輸入一個句型!"<<endl;
cin>>str;
char *p=str;
int yes=1;
if(*p=='a')
{
p++;
if(*p=='(')
{
int sum=isloop3(p);
if(sum!=0)
{
p+=sum;
if(*p=='b')
{
p++;
if(*p!='\0')
yes=0;
}
else
yes=0;
}
else
yes=0;
}
else
if(*p=='b')
{
p++;
if(*p!='\0')
yes=0;
}
else
yes=0;
}
else
yes=0;
if(yes==1)
cout<<"符合文法!"<<endl;
else
cout<<"非法輸入!"<<endl;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -