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


  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; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值