表示数值的字符串

原题链接:
剑指 Offer 20. 表示数值的字符串 - 力扣(LeetCode)

1.1 题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
数值(按顺序)可以分成以下几个部分:
        1.若干空格
        2.一个 小数 或者 整数
        3.(可选)一个 'e' 或 'E' ,后面跟着一个 整数
        4.若干空格
小数(按顺序)可以分成以下几个部分:
        1.(可选)一个符号字符('+' 或 '-')
        2.下述格式之一:
                  1.至少一位数字,后面跟着一个点 '.'
                  2.至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
                  3.一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:
        1.(可选)一个符号字符('+' 或 '-')
        2.至少一位数字
部分数值列举如下:
       · ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
部分非数值列举如下:
       · ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]

1.2 思路分析

表示数值的字符串遵循模式 A[.[B]][e|EC]或者.B[e]EC],其中A 为数值的整数部分,B紧跟着小数点为数值的小数部分,C紧跟着'e或者E为数值的指数部分.在小数里可能没有数值的整数部分.例如,小数.123 等于0.123。因此 A 部分不是必需的。如果一个数没有整数部分,那么它的小数部分不

能为空。

上述A和 C都是可能以'+或者'-'开头的0~9 的数位串;B也是0~9的数位串,但前面不能有正负号。

以表示数值的字符串"123.45e+6"为例,“123”是它的整数部分A,“45”

是它的小数部分 B,“+6”是它的指数部分C。

判断一个字符串是否符合上述模式时,首先尽可能多地扫描0~9 的数位(有可能在起始处有'+'或者'-'),也就是前面模式中表示数值整数的A部分。如果遇到小数点.',则开始扫描表示数值小数部分的 B 部分。如果遇到'e'或者'E',则开始扫描表示数值指数的C 部分。

代码中有注释,说到底就是暴力枚举的感觉,剑指offer上跟leetcode上的题目略微有一点不同:剑指offer上表示数值的字符串前后没有空格。

bool isNumber(char* s){if(s == NULL){return false;}while(*s==' ') //跳过前面的空格{s++;}if(*s=='+'||*s=='-') //判断正负号{s++;if(*s=='+'||*s=='-') //连续的两个正负号{return false;}}if(*s=='\0') //只有正负号的情况{return false;}int dot = 0, e = 0, num = 0; //记录小数点,e,数字出现的次数//遍历随后的字符串while(*s!='\0'){if(*s>='0'&&*s<='9'){s++;num++;}else if(*s=='.'){if(dot > 0||e>0){//在出现小数点时如果已经有小数点了,如: ..34 ; 或者e后面出现小数点,如:e3.2return false;}s++;dot++;if(num==0 && !(*s>='0'&&*s<='9')) {return false;}}else if(*s=='e'||*s=='E') //判断e{if(num == 0 || e > 0){//出现e却没有数字,如:e23;或者出现多个e,如:ee32return false;}s++;e++;if(*s=='+'||*s=='-') //判断正负号{s++;if(*s=='+'||*s=='-') //连续的两个正负号, e后面不能连续的两个正负号{return false;}}if(*s=='\0'||*s==' ') //如果e后面就没了,return false{return false;}        }else if(*s == ' '){break; //遇到空格直接跳出循环}else{return false;}}while(*s==' ') {s++;}if(*s=='\0'){//如果是末尾的空格返回truereturn true;}else{//如果是中间的空格返回falsereturn false;}
}

剑指offer----C语言版----第十四天相关推荐

  1. 【剑指offer】Java版代码(完整版)

    参考链接 [剑指offer]Java版代码(完整版)

  2. 剑指offer(第二版)读书笔记以及编程题目python版答案(二)

    剑指offer(第二版)读书笔记以及编程题目python版答案(二) 题目五:青蛙跳台阶 github地址: https://github.com/ciecus/leetcode_answers/tr ...

  3. 剑指offer第2版Python题解(更新中)

    O(n^2)排序 冒泡排序.插入排序与选择排序(Python)_NLP_victor的博客-CSDN博客 归并 归并排序(Python)_NLP_victor的博客-CSDN博客 快排 快速排序(Py ...

  4. 剑指Offer(第二版)面试题56:数组中数字出现的次数

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73609133冷血之心的博客) 剑指Offer(第二版)面试题56: ...

  5. 剑指Offer(JS版)

    字符串的排列 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. ...

  6. 剑指offer有python版吗_剑指Offer算法类题目[Python版]

    标签:重复   作用   coding   面试   medium   mba   none   fas   utf-8 面试题012 数值的整数次方 解题思路1 考虑所有情况,循环连乘 代码: de ...

  7. LeetCode刷题 _「剑指 Offer]专项突破版

    第01天 整数 剑指 Offer II 001. 整数除法 class Solution:# 时间复杂度:O(logn), 空间复杂度:O(1)def divideCore(self, dividen ...

  8. 剑指offer C语言实现

    剑指offer的C语言实现,已经提交到github了, 需要的可以去看看 https://github.com/lintingbin2009/C-language/tree/master/%E5%89 ...

  9. 剑指offer有用python版的吗_Python算法面试通关,剑指offer就靠它了

    原标题:Python算法面试通关,剑指offer就靠它了 北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫算法工程师. 算法,晦涩难懂,却又是IT领域最受重视的素养之一可以说, ...

最新文章

  1. Java8 的 Stream 流式操作之王者归来
  2. python对印刷的用途_用Python式的方法来印刷价值
  3. UVAPOJ离散概率与数学期望入门练习[4]
  4. #计算长方形的周长和面积公式_Animate如何制作动态计算长方形面积及周长
  5. mysql查看所有触发器以及存储过程等操作集合
  6. python编写递归函数和非递归函数、输出斐波那契数列_C语言编程:用递归和非递归法输出斐波那契数列...
  7. 1200兆路由器网速_办个100M的网,买一个1200M的路由器回家,网速真的会变快吗?...
  8. Webpower揭晓2017最有效数字营销策略
  9. Windows设置程序开机自启动
  10. WPS服务器维护,wps卸载云服务器
  11. matlab通过变量调用txt文件路径,MATLAB使用load函数读取txt文档
  12. 程序员吞噬零售业,成也中台败也中台 | 零售十年变迁路
  13. 小程序开通直播的思路总结
  14. 现在IT行业哪个方向比较好?
  15. kafka —— consumers 消费者 group 找不到得原因
  16. ACDC:开箱即用的多租户数据集成平台
  17. 人员定位系统定位基站安装规范
  18. 金蝶显示未登录服务器,KIS安全锁离线登录问题
  19. 不刷单,中小卖家如何提升店铺流量?
  20. 碰壁17次老前辈呕心沥血总结的软件测试面试题!!!入职必看!!!

热门文章

  1. 热点文章如何采集(采集热点文章怎么写)
  2. 扁平化设计学习之二 设计原则
  3. 提高计算机软件速度的方法,提升电脑速度的10种方法
  4. 【Pygame系列】@你,快来签收卡通Q弹的小奥特曼打小怪兽的小游戏啦~
  5. 微信小程序|使用小程序实现通讯录功能,首字母快捷导航
  6. 基于RabbitMQ的TTL以及死信队列,使用SpringBoot实现延迟付款
  7. 数字电路-组合逻辑电路
  8. 如何实现git分支变动,钉钉群里收到变动信息的通知?
  9. mysql 子查询 as table_MySQL基础三种类型的子查询
  10. 22071驱动day1