首页 > 代码库 > OJ练习6——T8

OJ练习6——T8

把一串字符(字符指针表示的)转换为整数,要考虑以下情况:

1.忽略开始的空白字符

2.如果第一个非空白字符不是表示数字的正负号,就返回0

3.越界就返回界(即大于INT_MAX就返回INT_MAX,小于INT_MIN就返回INI_MIN)

【分析】

题目比较简单,要考虑的情况也容易想到,但是处理起来有细节要注意。

int atoi(const char *str) {        int i=0;        int flag=1;        long long result=0;        if(str==NULL)            result=0;        while(str[i]!=\0 && (isspace(str[i])))            i++;        if(str[i]==-){            flag=-1;            i++;        }        else if(str[i]==+) i++;        else ;         while(str[i]!=\0 && isdigit(str[i])){            result=result*10+str[i]-0;                       if(flag*result>2147483647){                result=2147483647;                break;}            if(flag*result<-2147483648){                result=-2147483648;                break;}            i++;        }        return flag*result;    }

【总结】

在最后越界处理上花费了很多时间,如果数据超大,远远超过INT_MAX或INT_MIN,就必须在达到界时就返回,否则会转换成其他的数不能判为越界。

所以判断越界否要在循环里面进行。

测试例有一例为,输入-2147483648,由于正负的界不是对称的,如果不先加上符号一起判断,就不能得到正确的-2147483648,而是得到-2147483647.

所以flag*result,一起判断是否越界,不能在最后才加符号。

OJ练习6——T8