C++ NC100 将字符串转化为整数
//要求: //①求正负 //②上界溢出则返回上界,下界溢出则返回下界 //③遇到非数字(不包含+,-),则返回在该字符出现之前计算出的整数 //④能够跳过前面的空白字符 int atoi(const char *str) { long long num = 0;//绝对值,为了发现溢出,使用比返回类型int(4字节)更长的类型long long(8字节) int sign = 1;//符号 int result = 0;//结果 long long temp; //暂存结果 const int min = (int)0x80000000;//下界 const int max = 2147483647;//上界 while (*str == '\t' || *str == ' ')//跳过前面的空白字符 { ++str; } if (*str == 0) //str为空字符串,那么将返回 0 { goto Over; } if (*str == '-' || *str == '+')//判断正负 { if (*str == '-') sign = -1; ++str; } for (; *str != 0; ++str)//计算获数值 { if (*str >= '0'&&*str <= '9') { num = num * 10 + (*str - '0'); } else { break;//非数字则截断 } } temp = num * sign; result = temp; if (temp > max)//判断是否上界溢出 { result = max; goto Over; } if (temp < min)//判断是否下界溢出 { result = min; goto Over; } Over: return result; }