首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。