劍指offer_編程題_表示數值的字符串

  • 題目
    請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。
    例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 
    但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
    
  1. 對小數點和e進行標記,逐字符匹配
    class Solution {
    public:
        bool isNumeric(char* string)
        {
     	   if(string==NULL)
     		   return false;
     	   if(*string=='+'||*string=='-')
     		   string++;
     	   int xsdflag = 0, eflag = 0;
     	   while(*string!='\0')
     	   {
     		   if (*string>='0'&&*string<='9')
     			   string++;
     		   else if (*string=='.') {
     			   if (xsdflag == 1)
     				   return false;
     			   xsdflag = 1;
     			   string++;
     		   }
     		   else if (*string=='e'||*string=='E') {
     			   if (eflag == 1)
     				   return false;
     			   xsdflag = 1;
     			   eflag = 1;
     			   if (*(string+1) == '+'||*(string+1)== '-')
     				   string++;
     			   else if (*(string+1)=='\0')
     				   return false;
     			   string++;
     		   }
     		   else
     			   return false;
     	   }
     	   return true;
        }
    };
    
  2. 使用正則求解
    #include<regex>
    class Solution {
    public:
        bool isNumeric(char* string)
        {
     	   std::string s = string;
     	   std::string pattern = "[+-]?[0-9]*(\\.[0-9]*)?([eE][+-]?[0-9]+)?";
     	   std::regex rec(pattern);
     	   if (std::regex_match(s, rec))
     		   return true;
     	   return false;
        }
    };
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章