您的位置:首页 > 其它

实现一个函数,把一个字符串转换成整数

2017-07-18 10:07 567 查看

剑指offer之“把一个字符串转换成整数”

很多人看到这么简单的面试题目,都是大笔一挥,立马写下洋洋洒洒函数:

int StringToInt(char* string){
int num = 0;
while(*string!='\0'){
num = num*10 + *string - '0';
string++;
}
return num;
}


仔细想象,面试官又不是傻子,出这么简单的题目肯定不是为了看你这么简单粗暴的实现。醉翁之意不在酒,可能他想考察你的不是你能不能实现这个简单的函数,而是你的编程习惯,包括你是否会在编码前想好测试用例,是否会考虑代码的规范性、完整性和鲁棒性。函数的主要功能实现了,可你有没有考虑边界条件和错误处理?如果string是空指针,程序瞬干爆炸。于是我们面对这种看似简单的题目,应事先想好程序的基本功能、边界条件以及错误处理。然后根据这三个方面去设计测试用例。可能还需要你考虑当字符串长度过长的时候转化成整数int会不会溢出等等。

//基本功能:输入一个正常的“整数”字符串”10086“?
//边界条件:输入的字符串为”0“的时候怎么处理?
//错误处理:输入的字符串为空指针的时候怎么处理,不是含有非数字的字符串又怎么处理?
int nullFlag = 0;
int illegalFlag = 0;
int StringToInt(char* string){
int num = 0;
char* temp = string;
//如果是空指针,将nullFlag赋为1,函数返回0
if(string == NULL){
nullFlag = 1;
return 0;
}
//如果有其他字符,将illegalFlag赋为1,函数返回0
while(*temp<'0' || *temp>'9'){
illegalFlag=1;
temp++;
return 0;
}
while(*string!='\0'){
num = num*10 + *string - '0';
string++;
}
return num;
}


针对上面考虑到的问题改进了程序,加了边界条件判断以及错误处理,但是还是没有考虑全面,就像上面说的还有字符串长度过长等问题。但你能实现基本功能,判断边界条件以及错误处理。并在编码前能想好测试用例,我相信面试官一定会对你刮目相看,除非你遇到了一个假的面试官。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数
相关文章推荐