在面试过程中,不少人有这样的经历。笔试题感觉做的很好,但是没有应聘上。为啥?看似简单的问题,面试官的要求就越高,这时候需要考虑的问题的方方面面,一不小心,就大意失荆州。
下面看一个简单的微软面试题:把一个字符串转换成整数。大多数人,一看到这个标题,大多数人觉得“小意思”,我不到三分钟就搞定它。
return number;
}
你会不会,微软的人太弱智了吧。不好意思,你被拒绝了。
对于简单的程序,除了完成基本的功能外,还要考虑边界处理,错误处理等等。对于这道题,完成转换时基本的要求。
完整的程序你需要考虑的问题有:
1:指针处理,比如空指针
2:正负号处理,比如
str="-123456";
3:字符前的
0
字符问题,比如
str="00000123456";
4:错误的输入,比如
str="123abc456";
5:最大正整数和最小正整数
6:溢出
下面为一个比较完整的程序:
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
注释在程序中。各位,觉得这个程序不简单了吧。