标签:regex 有效数字 pattern Solution +- && hasNum
详细思路
分类讨论,+-只能在首尾或者e下一位,遇到E,只能有一个,前面必须有数字,后面必须也有数字,小数点只能有一个,前面不能有Eclass Solution { public: bool hasE, hasNum, hasFloat; bool isNumber(string& s) { for(int i = 0; i < s.size(); i++) { // 符号位只能在首位或E的后一位 if((s[i] == '-' || s[i] == '+') && (i == 0 || s[i - 1] == 'e' || s[i - 1] == 'E'))continue; else if((s[i] == 'e' || s[i] == 'E') && !hasE && hasNum) { //只存在一个E, 前面必须有数字, 后面也必须有数字 hasE = true; hasNum = false; }else if(s[i] == '.' && !hasFloat && !hasE) { //只存在一个小数点, 不能在E的后面 hasFloat = true; }else if(isdigit(s[i])) { hasNum = true; }else return false; } return hasNum; } };详细思路 正则表达式
class Solution { public: static const regex pattern; bool isNumber(string str) { return regex_match(str, pattern); } }; const regex Solution::pattern((小数)|(整数)|(((小数)|(整数))[eE](整数))); 整数:[+-]?\\d+ 小数:[+-]?((1)|(2)|(3)) 1:\\d+\\. 2:\\d+\\.\\d+ 3:\\.\\d+ 代入之后 class Solution { public: static const regex pattern; bool isNumber(string str) { return regex_match(str, pattern); } }; const regex Solution::pattern("([+-]?((\\d+\\.)|(\\d+\\.\\d+) |(\\.\\d+)))|([+-]?\\d+)|((([+-]?((\\d+\\.)|(\\d+\\.\\d+) |(\\.\\d+)))|([+-]?\\d+))[eE]([+-]?\\d+))"); 踩过的坑 c++ 用正则表达式记得作为类的静态变量或全局变量,避免重复构造的开销,否则会超时
标签:regex,有效数字,pattern,Solution,+-,&&,hasNum 来源: https://www.cnblogs.com/zhouzihong/p/15075277.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。