表示数值的字符串

实现一个函数判断字符串是否表示数值(包括整数和小数),如'+100', '5e2', '-1E-16'等
但'12e', '1a3.12', '+-9'都不是

整个扫描过程分为三部分

  1. 扫描整数部分
  2. 扫描小数部分(如果有)
    3)扫描E|e 后面的部分(如果有)
bool scanUnsigned(const char** str)
{
    const char* before = *str;
    while(**str != '\0' && **str='0' && **str <= '9')
        ++(*str);
    return *str>before;
  }

bool scanInteger(const char** str)
 {
    if(**str == '+' || **str == '-')
      ++(*str);
    return scanUnsigned(str);
  }
bool isNumeric(const char* str)
{
  if(str == NULL)
    return false;
  bool numeric = scanInteger(&str);
  if(*str == '.')
    {
        ++str;
        //小数部分没有符号
        // 用 || 的原因:小数前后可以有或没有数字,如3.,.3
        numeric = scanUnsigned(&str) || numeric;
        
    }
    if(*str == 'e' || *str == 'E')
      {
        ++str;
        // e前面可能有符号
        // 用 && 的原因:e前后必须都有数字,否则e3, 3e都不是数值
        numeric = numeric && scanInteger(&str);
      }
  return numeric&&*str == '\0';
}

你可能感兴趣的:(表示数值的字符串)