再忙再累的日子也是有快乐的~~~# pets - 心有所宠
a*n
1 楼
按照c++ reference. 输入错误返回0,上溢返回INT_MAX, 下溢返回INT_MIN.
谢谢。
//return 0 if invalid
int atoi(const char*s) {
assert(s);
const char *p = s;
int sign = 1;
int limit = INT_MAX;
int n = 0;
//skip space
while(*p == ' ') {
p++;
}
if(*p == '-') {
sign = -1;
p++;
limit = INT_MIN;
}else if(*p == '+'){
p++;
}
while(*p) {
if(*p>='0' && *p<='9'){
if(n > INT_MAX/10) {
return sign? INT_MAX: INT_MIN;
}
n *= 10;
if(n > INT_MAX - *p + '0) {
return sign? INT_MAX: INT_MIN;
}
n += *p - '0';
p++;
}else{
return 0;
}
}
return sign * n;
}
谢谢。
//return 0 if invalid
int atoi(const char*s) {
assert(s);
const char *p = s;
int sign = 1;
int limit = INT_MAX;
int n = 0;
//skip space
while(*p == ' ') {
p++;
}
if(*p == '-') {
sign = -1;
p++;
limit = INT_MIN;
}else if(*p == '+'){
p++;
}
while(*p) {
if(*p>='0' && *p<='9'){
if(n > INT_MAX/10) {
return sign? INT_MAX: INT_MIN;
}
n *= 10;
if(n > INT_MAX - *p + '0) {
return sign? INT_MAX: INT_MIN;
}
n += *p - '0';
p++;
}else{
return 0;
}
}
return sign * n;
}