Loading... 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串`"+100"`,`"5e2"`,`"-123"`,`"3.1416"`和`"-1E-16"`都表示数值。 但是`"12e"`,`"1a3.14"`,`"1.2.3"`,`"+-5"`和`"12e+4.3"`都不是。 **注意** : 1. 小数可以没有整数部分,例如.123等于0.123; 2. 小数点后面可以没有数字,例如233.等于233.0; 3. 小数点前面和后面可以有数字,例如233.666; 4. 当e或E前面没有数字时,整个字符串不能表示数字,例如.e1、e1; 5. 当e或E后面没有整数时,整个字符串不能表示数字,例如12e、12e+5.4; ### **样例:** ``` 输入: "0" 输出: true ``` ```cpp class Solution { public: bool isNumber(string s) { int i = 0, j = s.size() - 1; while (i <= j && s[i] == ' ') i++; while (j < i && s[j] == ' ') j++; // 如果为空串 if (i > j) return false; s = s.substr(i, j - i + 1); //判断数字开头 + - // substr 第二个参数为长度,为空,则一起拷贝到字符串末尾 if (s[0] == '+' || s[0] == '-') s = s.substr(1); // - + -. +. if (s.empty() || s[0] == '.' && s.size() == 1) return false; int dot = 0, e = 0; for (int i = 0; i < s.size(); i++) { // 数字字符越过 if (s[i] >= '0' && s[i] <= '9') ; else if (s[i] == '.') { dot++; // e. e12. 123.123.123 if (dot > 1 || e) return false; } else if (s[i] == 'E' || s[i] == 'e') { e++; // e后面没有数字 只有 123e 123e23e // 注意 .e1 此种情况 if (i + 1 == s.size() || !i || e > 1 || i == 1 && s[0] == '.') return false; // 123e+ 123e- if (s[i + 1] == '+' || s[i + 1] == '-') { if (i + 2 == s.size()) return false; i++; //+ - 号过滤掉,重新循环 } } else // 对于其它非目标元素 +-5, 去掉+后的-5 return false; } return true; } }; ``` 最后修改:2021 年 06 月 01 日 04 : 09 PM © 禁止转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 ×Close 赞赏作者 扫一扫支付