劍指offer-20-表示數值的字串
阿新 • • 發佈:2020-08-06
思路:
1.先去除首行和行尾空格
2.行首如果有正負號直接忽略
3.如果字串為空或者只有一個‘.’,則不是合法數
4.迴圈真個字串,去掉一下幾種情況
‘.’或者‘e’多於1個
‘.’在e後面出現
e後面或者前面為空,或者e前面緊跟著‘.’
e後面緊跟著正負號,但是正負號後面為空
5.其他情況都合法
程式碼:
class Solution { public: bool isNumber(string s) { //去除字串前後空格 int i=0; while(i<s.size() && s[i]==' ') i++; int j=s.size()-1; while(j>=0 && s[j]==' ') j--; if(i>j) return false; s=s.substr(i,j-i+1); //判斷首行如果有一個正負號直接忽略 if(s[0]=='-'||s[0]=='+') s=s.substr(1); if(s.empty() || s[0]=='.' && s.size()==1) return false; //判斷“.”和‘e’的情況 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++; if(e || dot>1) return false; } else if(s[i]=='e' || s[i]=='E') { e++; if(i+1==s.size() || !i || e>1 || i==1&&s[0]=='.') return false; if(s[i+1]=='+' || s[i+1]=='-') { if(i+2==s.size()) return false; i++; } } else return false; } return true; } };