实现atoi函数
atoi函数最关键的地方是想好测试用例:
- 输入为空字符串,输出为0;
- 输入字符串大小超过INT_MAX输出INT_MAX;
- 输入字符串大小小于INT_MIN输出INT_MIN;
- 输入字符串中含有不规则字符,中断atoi, 如"01a4" 输出1;
- 输入字符串开头和结尾含有空格,忽略空格,如输入" +01 "输出1;
- 输入字符串开头除空格以外如果是"+"和"-",视为正确输入。
class Solution { public: int atoi(const char *str) { if(strlen(str)==0) return 0; double result=0; int j=0; while(str[j]==' ') //忽略字符串首空格 { j++; } int last = strlen(str)-1; int last_space = 0; while(str[last]==' ') //忽略字符串尾空格 { last--; last_space++; } if(str[j]=='+') { for(int i=j+1;i<strlen(str)-last_space;i++) { if(str[i]>='0'&&str[i]<='9') { result = result*10 + (str[i]-'0'); } //如果遇到非法字符,终止转换 else { break; } } if(result>INT_MAX) { return INT_MAX; } else { return result; } } if(str[j]=='-') { for(int i=j+1;i<strlen(str)-last_space;i++) { if(str[i]>='0'&&str[i]<='9') { result = result*10 + (str[i]-'0'); } else { break; } } if(result*(-1) < INT_MIN) { return INT_MIN; } return result*(-1); } for(int i=j;i<strlen(str)-last_space;i++) { if(str[i]>='0'&&str[i]<='9') { result = result*10 + (str[i]-'0'); } else { break; } } if(result>INT_MAX) { return INT_MAX; } if(result*(-1) < INT_MIN) { return INT_MIN; } return result; } };