实现atoi函数
Posted ythunder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现atoi函数相关的知识,希望对你有一定的参考价值。
面试被要求实现这个函数。
函数功能:将字符串转换为整数。那么实现这个一半需要考虑到哪些情况呢?
- 符号:整数可以为负数。
- 考虑上溢和下溢
- 字符中的非法字符如何处理
我们知道int类型计算机存储中占32bit, 首位存储符号,表示的数范围为-2147483648 - 2147483647
#define MAX_INT ((1 << 31) - 1)
#define MIN_INT (-(1 << 31))
using namespace std;
int MyAtoi(char *str)
char *temp = str;
int i = 0;
int flag = 0;
unsigned int sum = 0;
while( ' ' == *temp ) ++temp; //排除开头的空格
if( *temp != '-' && *temp != '+' && (*temp < '0' || *temp >= '9') ) //第一个字符不是数字或者+-号
return -1;
if( *temp == '-' ) //第一个是负号
flag = 1;
++temp;
else if( *temp == '+' )
++temp;
while( *temp >= '0' && *temp <= '9' )
if( !flag ) //上溢
if(sum > MAX_INT/10 || (sum == MAX_INT/10 && (*temp > '7')))
return MAX_INT;
else //下溢
if(sum > MAX_INT/10 || (sum == MAX_INT/10 && (*temp > '8')))
return MIN_INT;
sum = sum * 10 + (*temp - '0');
++temp;
return flag ? (-1*sum):sum;
以上是关于实现atoi函数的主要内容,如果未能解决你的问题,请参考以下文章