看似简单,但是经常出错的微软面试题(CC++)1

    技术2022-05-20  44

    在面试过程中,不少人有这样的经历。笔试题感觉做的很好,但是没有应聘上。为啥?看似简单的问题,面试官的要求就越高,这时候需要考虑的问题的方方面面,一不小心,就大意失荆州。

    下面看一个简单的微软面试题:把一个字符串转换成整数。大多数人,一看到这个标题,大多数人觉得“小意思”,我不到三分钟就搞定它。

    int StrToInt(char* string) { int number = 0; while(*string != 0) { number = number * 10 + *string - '0'; ++string; } return number; }

    你会不会,微软的人太弱智了吧。不好意思,你被拒绝了。

    对于简单的程序,除了完成基本的功能外,还要考虑边界处理,错误处理等等。对于这道题,完成转换时基本的要求。

    完整的程序你需要考虑的问题有:

    1:指针处理,比如空指针

    2:正负号处理,比如 str="-123456";

    3:字符前的 0 字符问题,比如 str="00000123456";

    4:错误的输入,比如 str="123abc456";

    5:最大正整数和最小正整数

    6:溢出

    下面为一个比较完整的程序:

    #include<stdio.h> #include<limits.h> int str_to_int(const char * str); int main(int argc,char * argv[]) { char * str="-002147483648"; int val = str_to_int(str); printf("val = %d/n",val); return 0; } int str_to_int(const char * str) { int val = 0;//reutrn integer int p = 1;//0:negative integer;1:positive integer if(NULL == str) { return -1; } if((*str) == '-') { p = 0;//negative integer str++; } while((*str)=='0') {/*remove the character '0' in the head of the string.*/ str++; } while((*str)!='/0') { if((*str >='0')&&(*str <='9')) { int tmp = val; if(p == 1)/*positive*/ { val = (val * 10) + ( *str - '0'); } else if(p == 0)/*negative*/ { val = (val * 10) - ( *str - '0'); } str ++; if(((p == 1)&&(val < tmp)) || ((p == 0)&&(val > tmp))) { /*integer flowed*/ return -1; } } else { return -1;//none integer } } return val; }

    Ubuntu10.4 结果:

    val = -2147483648

     

    注释在程序中。各位,觉得这个程序不简单了吧。


    最新回复(0)