DFA应用——判断合法数字
来源:互联网 发布:移动硬盘数据同步软件 编辑:程序博客网 时间:2024/06/10 22:39
判断输入是否是一个合法数字
状态par= 0: 初始状态
1: 以 + 或者 - 号
2: 以 .结尾
3: 以数字结尾, 没出现过小数点
4: 以E 或者 e结尾
5: 数字后面跟blank
6: 有了E,以数字结尾
7: 有了E , 以+或者-结尾
8: 有了E ,数字后面跟blank
状态par= 0: 初始状态
1: 以 + 或者 - 号
2: 以 .结尾
3: 以数字结尾, 没出现过小数点
4: 以E 或者 e结尾
5: 数字后面跟blank
6: 有了E,以数字结尾
7: 有了E , 以+或者-结尾
8: 有了E ,数字后面跟blank
9: 以数字结尾, 已经出现过小数点
#include<cstdio>#include<cstring>#include<cctype>using namespace std;const int maxn=5000;int T ,N,par;char ch[maxn] ;char now[maxn] ;void Init(){ int i , j ,k, len; i = 0 ; len = strlen(ch); while(i<len && (ch[i ]==' ' || ch[i]==9)) i++ ; j = len-1 ; while(j>=i && (ch[j]==' ' || ch[i]==9)) j-- ; for(k=0 ;i<=j;i++,k++){ now[k] = ch[i] ; } now[k] = 0 ; N = k ;}void judge(char c){ if(par == 0){ if(c=='+' || c=='-') par = 1 ; else if(c == '.') par = -1 ; else if( isdigit(c) ) par = 3 ; else if( c=='e' || c=='E') par = 4 ; else par = -1 ; } else if(par == 1){ if( isdigit(c) ) par = 3 ; else par = -1 ; } else if(par == 2){ if( isdigit(c) ) par = 9 ; else par = -1 ; } else if(par == 3){ if( isdigit(c) ) par = 3 ; else if(c == '.') par = 2 ; else if(c=='+' || c=='-') par = -1 ; else if(c=='e' || c=='E') par = 4 ; else par = 5 ; //空格 } else if(par == 9){ if( isdigit(c) ) par = 9 ; else if(c=='e' || c=='E') par = 4 ; else if(c==' ' || c==9) par = 5 ; else par = -1 ; } else if(par == 4){ if( isdigit(c) ) par = 6 ; else if(c=='+' || c=='-') par = 7 ; else par = -1 ; } else if(par == 5){ if(c=='e' || c=='E') par = 4 ; else if(c==' ' || c==9) par = 5 ; else par = -1 ; } else if(par == 6){ if(isdigit(c)) par = 6 ; else if(c==' ' || c==9) par = 8 ; else par = -1 ; } else if(par == 7) { if(isdigit(c)) par = 6 ; else par = -1 ; } else if(par == 8){ if(c==' ' || c==9) par = 8 ; else par = -1 ; }}void solve(){ int i,j ; par = 0 ; bool ok = 1 ; for(i=0;i<N;i++){ judge( now[i] ); if(par == -1){ ok = 0 ; break ; } } if(par==1 || par==2 || par==4 || par==7 || par==-1) ok=0 ; printf("the number is "); if(!ok) printf("illegal\n\n"); else printf("legal\n\n");}int main(){printf("Please input the number of the test cases: "); scanf("%d",&T) ; printf("********Login********\n"); for(int i=1;i<=T;i++){printf("Please input the number you want to test (the length of string is limited to 5000) \n");printf("The %d of the number is :\n",i); scanf("%s",ch);//gets(ch) ; Init() ; solve() ; if(i==T) printf("********Exit********\n"); } return 0 ;}
阅读全文
0 0
- DFA应用——判断合法数字
- DFA(判断是否是数字)
- js判断数字合法
- LeetCode65——Valid Number(使用DFA)来判断字符串是否为数字
- 指针——判断合法字符
- VC判断字符串是否为合法数字
- NFA转换成DFA——汉字形式数字转换成整数数字
- IT面试题——判断合法出栈序列
- 程序员面试金典——合法括号序列判断
- 【前端】输入金额时如何判断数字合法
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT2140_图结构练习——判断给定图是否存在合法拓扑序列(邻接表)
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- python文件和目录操作方法大全(含实例)
- 史上最全最强SpringMVC详细示例实战教程
- c++primer 学习日记2 复合类型 引用与指针
- 自定义View之Paint
- JavaScript判断一个页面是否是使用微信打开,并调跳转
- DFA应用——判断合法数字
- Java静态方法为什么不能访问非静态方法
- ElasticSearch5.x踩坑记录(二):linux下es5.6.3、head、ik安装
- 软件工程(C编码实践篇)学习总结
- sql中查询一张表显示多列自己需要的数据
- UIAutomator2.0详解(UIDevice篇----触屏操作2)
- Linux中使用update-alternatives配置多个jdk
- Postman使用官方文档翻译--7设置介绍
- wmd的改进算法