点击蓝字关注我哦
以下是本期干货视频 视频后还附有文字版本哦▼《腾讯经典考点-写代码实现atoi函数》▼
ps:请在WiFi环境下打开,如果有钱任性请随意
在腾讯面试时,经常会被问到如何用代码实现atoi函数? 这道题看起来很简单,如果需要实现基本功能,大概10行以内就可以搞定。比如如下代码:int atoi(char* str){ int number = 0; while(*str != 0) { number = number * 10 + *str - '0'; ++str; } return number; }
但是上面的代码漏洞百出,不是面试官想要的代码。上述代码在遇到特殊情况时,就会产生不靠谱的结果。比如
空指针
正负号
溢出
非法字符
int atoi(const char* str){ //给一个比较大的数据类型,方便处理溢出 long long num = 0; //判断指针是否为空,以及是否有有效字符 if(str != nullptr && *str != '\0') { //是否为负数 bool minus = false; if(*str == '+') ++str; else if(*str == '-') { ++str; minus = true;} if(*str != '\0') { num = StrToInt(str, minus); } } return (int) num;}long long StrToInt(const char* str, bool minus){ long long num = 0; while(*str != '\0') { //判断是否为有效字符 if(*str >= '0' && *str <= '9') { //判断正负数 int flag = minus ? -1 : 1; num = num * 10 + flag * (*str - '0'); //判断是否溢出,包括正溢出和负溢出 if((!minus && num > 0x7fffffff) || (minus && num < (signed int) 0x80000000)) { num = 0; break; } ++str; } else { num = 0; break; }} return num;}
作者:
周荣
审核:王海斌
编辑:文艺
点个在看,点亮"offer"