【从零单排之微软面试100题系列】20之把字符串转换成整数

来源:互联网 发布:淘宝排名怎么靠前 编辑:程序博客网 时间:2024/06/11 12:37

原题参见july大神博客系列【微软面试100题】


题目描述:输入一个表示整数的字符串,把该字符串转换成整数(int)并输出。


分析思路:(本题亦见于《剑指offer》面试题49)

核心部分的代码其实就是 num = num*10 + flag * (*str - '0');

但是本题还需要考虑到各种输入情况,比如正负号、空指针、空字符串以及溢出等方方面面。因此要尽量周到和完整

书中给出的参考代码如下:

enum Status { kValid = 0, kInvalid };int g_nStatus = kValid;//全局变量用以区分有效和无效输入//空指针、空字符串、含非数字字符串均为非法输入int StrToInt(const char* str){g_nStatus = kInvalid;long long num = 0;if(str != NULL && *str != '\0'){bool minus = false;  //用来标识正负号if(*str == '+')str++;else if(*str == '-'){minus = true;str++;}if(*str != '\0')num = StrToIntCore(str,minus);}return (int) num;}long long StrToIntCore(const char* str, bool minus){long long num = 0;int flag = minus ? -1:1;while(*str != '\0'){if(*str >= 0' && *str <= '9'){num = num * 10 + flag * (*str - '0');//判断溢出if( (!minus) && num > 0x7FFFFFF || (minus && num < (int) 0x80000000)){num = 0;break;}str++;}else{//输入含有非数字时,提前退出,并返回0,num = 0;break;}}//正常遍历到字符串末位,将全局变量置为kValid,说明输出的值是有效的if(*str == '\0')g_nStatus = kValid;return num;}



0 0