剑指 Offer 20. 表示数值的字符串

难度中等193收藏分享切换为英文接收动态反馈

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

数值(按顺序)可以分成以下几个部分:

  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:

输入:s = "0"
输出:true

示例 2:

输入:s = "e"
输出:false

示例 3:

输入:s = "."
输出:false

示例 4:

输入:s = "    .1  "
输出:true

提示:

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,空格 ' ' 或者点 '.' 。

C++代码

具体原理见程序

class Solution {//符号 出现位置限制  出现次数//小数点.  不能出现在e或E后面 不能出现在末尾,必须紧跟着数字 只能出现一次 //+ -      只能出现在开头或者e或E的后面 最多两次//e E       前面必须是数字 后面必须是= - 或数字 只能出现一次
public:
//去掉字符串首尾空格void trim(string& str){str.erase(0, str.find_first_not_of(" \t")); // 去掉头部空格str.erase(str.find_last_not_of(" \t") + 1); // 去掉尾部空格}bool isNumber(string s) {if(s.empty()) return false;//去掉前面的空格trim(s);bool numFlag = false;bool dotFlag = false;bool eFlag = false;for(int i = 0; i < s.size(); i++){//如果当前位置是数字 则numFlag变为trueif(isdigit(s[i])) numFlag = true;//如果当前位置是小数点 则需要前面没出现过小数点 并且没有出现过e|Eelse if(s[i] == '.' && !dotFlag && !eFlag){if(i != (s.size() - 1) && !numFlag && (s[i+1] == 'e' || s[i+1] == 'E')) return false;//".e3"dotFlag = true;}//如果当前位置出现的是e|E 则需要前面没出现过e|E 并且不能出现在首位else if(i != 0 && (s[i] == 'e' || s[i] == 'E') && !eFlag && numFlag){//s[i] == 'e' || s[i] == 'E' 需要加括号eFlag = true;numFlag = false;//为了避免123e这种请求,出现e之后就标志为false}//如果出现的是+- 则只能出现在开头 或者紧接着e|Eelse if((s[i] == '+' || s[i] == '-') && (i == 0 || s[i - 1] == 'e' || s[i - 1] == 'E')){//这里不需要执行 只需要满足这个情况时 不false就行}//其他字符或其他情况都非法elsereturn false;    }//循环遍历之后没有false 则只要字符串中存在数字 则正确 故返回numFlagreturn numFlag;}
};

判断一个字符串是否是数值相关推荐

  1. 【JavaScript】判断一个字符串是否是数值 / 判断是否包含字母(附常用正则表达式)

    JavaScript 使用示例 如果是值(数字),返回其值;如果不是数字,返回空字符串''. 可以避免从数据库中取到空值,导致在前端显示报错的情况. autoConvertNum()函数定义如下: / ...

  2. C++如何高效地判断一个字符串是数值?

    在C++中如何判断一个字符串是数值,有许多方法. 有些方法利用输出流对象,效率很低. 也有用_ttof(str)函数,它将字符串str转换成double类型的数.如果其参数str不是一个数,则返回0. ...

  3. Java判断一个字符串是否包含某个字符

    1 问题 如何利用Java通过不同的方法来判断一个字符串是否包含某个字符. 2 方法 .contains方法 这个是利用java.lang.String.contains() 方法返回true,当且仅 ...

  4. c语言程序判断一个字符串是否是回文数,详解判断回文字符串和回文数算法的C语言代码!...

    一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define NO  0 #define uchar un ...

  5. C语言---写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

    题目: 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串. #include <string.h> #include <stdio.h> void left_re ...

  6. Java:判断一个字符串中是否存在另一个字符子串以及判断一个字符串中是否存在指定字符

    Java:判断一个字符串中包含指定字符子串,判断一个字符串中存在指定字符 字符串的contains方法可以判断一个字符串中是否存在另一个字符子串,示例如下 String Str = "Hel ...

  7. AJPFX实列判断一个字符串是不是对称字符串

    import java.util.Scanner; /** 判断一个字符串是否是对称字符串 */ public class StringDemo { public static void main(S ...

  8. 如何判断一个字符串在JavaScript中是否包含某个字符?

    本文翻译自:How to tell if a string contains a certain character in JavaScript? I have a page with a textb ...

  9. java怎么统计随机数出现次数,Excel统计出现次数、个数的VBA代码 java中怎么判断一个字符串中包含某个字符或字...

    延伸:java中怎么判断一个字符串中包含某个字符或字符 描述:...一个字符串中包含某个字符的单词说出现的次数 c#什么方法可以判断字符串中包含某个字符的个数? JAVA判断字符串数组中是否包含某字符 ...

最新文章

  1. C/C++语言void及void指针深层探索 .
  2. SDOI2020游记
  3. 【转】NSMutableArray的正确使用
  4. eureka常见错误
  5. eppp如何导入php文件_PHP如何处理文件权限?(代码示例)
  6. python主要数据变量_python的数据类型和变量
  7. 同步电路与跨时钟域电路设计2——多bit信号的跨时钟域传输(FIFO)
  8. 蒲公英内测分发平台是干什么的呢?
  9. 4.1 用格雷戈里公式求π的近似值
  10. 【一起入门MachineLearning】中科院机器学习第3课-朴素贝叶斯分类器
  11. js判断对象中每一项属性都不为空 非空检测
  12. 百度地图(BD-09)坐标系和高德(GCJ-02)坐标系的相互转换(PHP版)
  13. ubuntu设置root密码,强制删除用户及用户文件。
  14. c语言算正方形面积和周长,C语言编8个程序 比如输入正方形边长求其面积和周长 正方体求体积...
  15. 项目经理是否应该“正面刚”?
  16. 解决el-input 不能编辑输入问题
  17. 有谁知道10级的山丘之王是怎么死的?
  18. 10进制计数器Verilog编程
  19. 设计模式的六大原则(快速复习版)
  20. level set 介绍3

热门文章

  1. Android获取网速的方法
  2. UNITY C#内存泄漏
  3. 647. Palindromic Substrings
  4. HDU5511 : Minimum Cut-Cut
  5. Junit Hamcrest Eclemma
  6. 打开CEPH内核DOUT日志输出
  7. nyoj-228(士兵杀敌五) hdu-1556 Color the ball
  8. nyoj-619 青蛙过河
  9. LeetCode 121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)
  10. SpringBoot异常处理的简单理解