atoi函数实现

来源:互联网 发布:mysql 创建触发器 编辑:程序博客网 时间:2024/05/17 08:50

参考代码:

int atoi(const char *str){if(str == NULL || *str == '\0') {printf("invalid input\n");return 0;}int sign = 1;int sum = 0;if(*str == ' ') ++str;if(*str == '+') ++str;else if(*str == '-') {sign = -1;++str;}while(*str >= '0' && *str <= '9'){sum = sum * 10 + *str - '0';++str;}return sum * sign;}

测试用例:str = "+", str = “+aaa”;输出为0,为有效输入,其实应该是无效输入

剑指offer代码:

#include<stdio.h>#include<stdlib.h>enum status {kvalid = 0, kinvalid};int flag = kinvalid;int atoi(const char *str){if(str == NULL || *str == '\0') {flag = kinvalid;return 0;}int sign = 1;int sum = 0;if(*str == ' ') ++str;if(*str == '+') ++str;else if(*str == '-') {sign = -1;++str;}if(*str != '\0'){    while(*str != '\0')    {    if(*str >= '0' && *str <= '9')    {    sum = sum * 10 + *str - '0';if((sign * sum > 0x7FFFFFFF)    || (sign * sum < 0x80000000)){sum = 0;break;}    ++str;            } else {    sum = 0;    break;    }    }    if(*str == '\0') flag = kvalid;}return sum * sign;}

测试用例:str = “123a” 输出为0,为无效输入,按照atoi函数的本意,输出为123


0 0