C++怎么实现验证数字


本篇内容介绍了“C++怎么实现验证数字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Validate if a given string can be interpreted asa decimal number.Some examples:
“0”=>true
” 0.1 “=>true
“abc”=>false
“1 a”=>false
“2e10″=>true
” -90e3 “=>true
” 1e”=>false
“e3″=>false
” 6e-1″=>true
” 99e2.5″=>false
“53.5e93″=>true
” –6 “=>false
“-+3″=>false
“95a54e53″=>falseNote:It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:Numbers 0-9Exponent – “e”Positive/negative sign – “+”/”-“Decimal point – “.”Of course, the context of these characters also matters in the input.Update (2015-02-10):
The signature of theC++function had been updated. If you still see your function signature accepts aconst char *argument, please click the reload button to reset your code definition.首先,从题目中给的一些例子可以分析出来,我们所需要关注的除了数字以外的特殊字符有空格 ‘ “, 小数点 “.”, 自然数 “e/E”, 还要加上正负号 “+/-“, 除了这些字符需要考虑意外,出现了任何其他的字符,可以马上判定不是数字。下面我们来一一分析这些出现了也可能是数字的特殊字符:1. 空格 ‘ “:空格分为两种情况需要考虑,一种是出现在开头和末尾的空格,一种是出现在中间的字符。出现在开头和末尾的空格不影响数字,而一旦中间出现了空格,则立马不是数字。解决方法:预处理时去掉字符的首位空格,中间再检测到空格,则判定不是数字。2.小数点 “.”:小数点需要分的情况较多,首先的是小数点只能出现一次,但是小数点可以出现在任何位置,开头(“.3”), 中间(“1.e2”), 以及结尾(“1.”), 而且需要注意的是,小数点不能出现在自然数”e/E” 之后,如”1e.1″ false, “1e1.1″ false。还有,当小数点位于末尾时,前面必须是数字,如”1.” true,” -.” false。解决方法:开头中间结尾三个位置分开讨论情况。3.自然数 “e/E”:自然数的前后必须有数字,即自然数不能出现在开头和结尾,如 “e” false, “.e1″ false,”3.e” false,”3.e1″ true。而且小数点只能出现在自然数之前,还有就是自然数前面不能是符号,如”+e1″ false,”1+e” false. 解决方法:开头中间结尾三个位置分开讨论情况。4.正负号 “+/-“,正负号可以再开头出现,可以再自然数e之后出现,但不能是最后一个字符,后面得有数字,如”+1.e+5” true。解决方法:开头中间结尾三个位置分开讨论情况。下面我们开始正式分开头中间结尾三个位置来讨论情况:1. 在讨论三个位置之前做预处理,去掉字符串首尾的空格,可以采用两个指针分别指向开头和结尾,遇到空格则跳过,分别指向开头结尾非空格的字符。2. 对首字符处理,首字符只能为数字或者正负号 “+/-“,我们需要定义三个flag在标示我们是否之前检测到过小数点,自然数和正负号。首字符如为数字或正负号,则标记对应的flag,若不是,直接返回false。3. 对中间字符的处理,中间字符会出现五种情况,数字,小数点,自然数,正负号和其他字符。若是数字,标记flag并通过。若是自然数,则必须是第一次出现自然数,并且前一个字符不能是正负号,而且之前一定要出现过数字,才能标记flag通过。若是正负号,则之前的字符必须是自然数e,才能标记flag通过。若是小数点,则必须是第一次出现小数点并且自然数没有出现过,才能标记flag通过。若是其他,返回false。4. 对尾字符处理,最后一个字符只能是数字或小数点,其他字符都返回false。若是数字,返回true。若是小数点,则必须是第一次出现小数点并且自然数没有出现过,还有前面必须是数字,才能返回true。解法一:上面的写法略为复杂,我们尝试着来优化一下,根据上面的分析,所有的字符可以分为六大类,空格,符号,数字,小数点,自然底数和其他字符,我们需要五个标志变量,num, dot, exp, sign分别表示数字,小数点,自然底数和符号是否出现,numAfterE表示自然底数后面是否有数字,那么我们分别来看各种情况:- 空格: 我们需要排除的情况是,当前位置是空格而后面一位不为空格,但是之前有数字,小数点,自然底数或者符号出现 香港云主机时返回false。- 符号:符号前面如果有字符的话必须是空格或者是自然底数,标记sign为true。- 数字:标记num和numAfterE为true。- 小数点:如果之前出现过小数点或者自然底数,返回false,否则标记dot为true。- 自然底数:如果之前出现过自然底数或者之前从未出现过数字,返回false,否则标记exp为true,numAfterE为false。- 其他字符:返回false。最后返回num && numAfterE即可。解法二:这道题给了例子不够用,下面这些例子都是我在调试的过程中出现过的例子,用来参考:“C++怎么实现验证数字”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: win7无法访问windows installer服务如何解决

本文小编为大家详细介绍“win7无法访问windows installer服务如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“win7无法访问windows installer服务如何解决”文章能 香港云主机帮助大家解决疑惑,下面跟着小编的思路慢慢深入…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/14 15:42
下一篇 07/14 15:43

相关推荐