字符串转换为数字(完整标准版)

来源:互联网 发布:cf彩虹哥淘宝 编辑:程序博客网 时间:2024/05/01 13:22

  1. //copyright@njnu_mjn 2013  
  2. int StrToDecInt(const char* str)    
  3. {    
  4.     static const int MAX = (int)((unsigned)~0 >> 1);    
  5.     static const int MIN = -(int)((unsigned)~0 >> 1) - 1;    
  6.     static const int MAX_DIV = (int)((unsigned)~0 >> 1) / 10;    
  7.     static const int MIN_DIV = (int)((((unsigned)~0 >> 1) + 1) / 10);    
  8.     static const int MAX_R = (int)((unsigned)~0 >> 1) % 10;    
  9.     static const int MIN_R = (int)((((unsigned)~0 >> 1) + 1) % 10);    
  10.     int n = 0;    
  11.     int sign = 1;    
  12.     int c;    
  13.     
  14.     while (isspace(*str))    
  15.         ++str;    
  16.     if (*str == '+' || *str == '-')    
  17.     {    
  18.         if (*str == '-')    
  19.             sign = -1;    
  20.         ++str;    
  21.     }    
  22.     while (isdigit(*str))    
  23.     {    
  24.         c = *str - '0';    
  25.         if (sign > 0 && (n > MAX_DIV || (n == MAX_DIV && c >= MAX_R)))    
  26.         {    
  27.             n = MAX;    
  28.             break;    
  29.         }    
  30.         else if (sign < 0 && (n > MIN_DIV    || (n == MIN_DIV && c >= MIN_R)))    
  31.         {    
  32.             n = MIN;    
  33.             break;    
  34.         }    
  35.         n = n * 10 + c;    
  36.         ++str;    
  37.     }    
  38.     return sign > 0 ? n : -n; 
0 0