Valid Number
来源:互联网 发布:js遍历div下的a标签 编辑:程序博客网 时间:2024/05/16 10:59
Validate if a given string is numeric.
Some examples:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
这个题目很纠结@很多难以想到的构造竟然是对的。难度不小@此题最好边试边发现一些bug!再改!
注意:
1、前面空格,后空格,中间空格
2、加减号(e后面也能出现)
3、e,E 出现的处理
4、点号,能出现的位置。(e 后面不能出现!)
思路:
1、先处理前半部分空格
2、再处理符号(+,-)
3、之后边检查是否中间有空格,过滤末尾空格
4、是否是数,如果是数part为真方便后面处理!
5、对于e或者E的结合,只能出现一次,且在前面为数字的情况才能进行,part设为假。(如果后面有符号就处理掉,即向前走一步)
6、对于点号。首先是判断是否出现过.或e,没有的话继续。
bool isNumber(const char *s) { //".e1"错误,40.e3正确,8e错误 bool store_eflag = false; bool store_dotflag = false; bool num_flag = false; bool space_flag = false; bool part = false;//表示前面部分正确标志 while(*s != '\0'&&*s == ' ')//过滤前面的空格 { s++; } if(*s == '+' || *s == '-') { s++; } while(*s != '\0') { if(*s == ' ') { space_flag = true; } else if(space_flag)//中间出现过空格 { return false; } else if(*s == '.') { if(!store_dotflag &&!store_eflag )//未出现过.和e { store_dotflag = true; } else return false; } else if(isdigit(*s)) { part = true; num_flag = true; } else if(*s == 'e'||*s == 'E') { if(store_eflag != true&&part == true) { if(*(s+1) == '-'||*(s+1) == '+') { s++; } store_eflag = true; part = false;//此处设为假判断后续是否会来数字! } else return false; } else { return false; } s++; } return part; }
下面是本人测试的错误!
Input: "+.8" 所以 .8 也是对的!Output: false
Expected: true
8e 错误
8e2 对
Input: "e9"
Output: true
Expected: false
第二次:
对于数字,必须出现,否则怎么能叫数字呢?!part_flag 用于表示只是一部分,还需数字。
对于开始-- 处理空格,处理+-号。
再者中间空格,此处的中间空格处理很巧妙!!
对于逗号,保证出现前,必须未出现e,且第一次出现。
对于e,比较复杂,保证第一次出现,且出现时保证前面有数字
其他为假!
bool isNumber(const char *s) { bool dot_flag = false; bool e_exit = false; bool part_flag = true; bool space_flag = false; while(*s == ' ') { part_flag = true; ++s; } if(*s == '+'||*s == '-') { part_flag = true; ++s; } while(*s != '\0') { if(*s == ' ') { space_flag = true; ++s; } else if(space_flag)//中间空格!! { return false; } else if(*s == '.' && !dot_flag)//点号出现必须未出现,且在e之前, { if(!e_exit)//未出现过e { dot_flag = true; ++s; } else { return false; } } else if((*s == 'e'||*s == 'E') && !e_exit &&(!part_flag))//e 未出现,而且还需确保后面有数字,以及处理正负号(e9 也不行) { ++s; if(*s == '+'||*s == '-') { ++s; } part_flag = true;//必须有数字出现才完整 e_exit = true; } else if(*s >= '0' && *s <= '9' ) { part_flag = false;//必须有数字 ++s; } else { return false; } } return !part_flag; }
0 0
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- 利用顺序结构实现线性表的基本操作
- cocos2d之教你画一条直线
- Android IntentService详解
- inf文件解析
- struts2+jquery+json集成
- Valid Number
- 易语言-VB keypress事件中键盘上每个键的KeyAscii值
- Oracle中NVL2 和NULLIF
- sql笔记
- 在未来再谈论现在与过去
- ubuntu12.04 64 下apache2网站目录等访问权限设置
- wParam和lParam
- JDBC笔记
- 用vim阅读代码的最好方法