【剑指offer】053-表示数值的字符串

题目

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。

思路

字符串从头遍历到尾是一种方法,但是存在许多特判。所以我们将字符串切割,以(A.B E/e A)的格式为准
其中A是带符号的整数,B是不带符号的整数
切割之后再对字符串的部分分开判断即可

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//s字符串
function isNumeric (s{
  // write code here
  let epos = s.search(/[e | E]/)
  if (epos !== -1) {
    let epart = s.substring(epos + 1)
    if (epart.length === 0return false
    let dotpos = epart.indexOf('.')
    if (dotpos !== -1return false
  }
  if (epos !== -1) s = s.substring(0, epos)
  let dotpos = s.indexOf('.')
  if (dotpos !== -1) {
    return isInteger(s.substring(0, dotpos)) && isInteger(s.substring(dotpos + 1))
  } else {
    return isInteger(s)
  }
}
function isInteger (s{
  let opnumber = 0
  for (let i = 0; i < s.length; i++) {
    if (s[i] === '+' || s[i] === '-') opnumber++
  }
  if (opnumber > 1return false
  else if (opnumber === 1) s = s.substring(1)
  for (let i = 0; i < s.length; i++) {
    if (isNaN(s[i])) {
      return false
    }
  }
  return true
}
文章作者: ptp
文章链接: https://youyingjie114.github.io/2019/11/07/jz-offer/jz-offer-053/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PTP'S BLOG