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

作者:翁松秀


剑指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;
}

针对上面考虑到的问题改进了程序,加了边界条件判断以及错误处理,但是还是没有考虑全面,就像上面说的还有字符串长度过长等问题。但你能实现基本功能,判断边界条件以及错误处理。并在编码前能想好测试用例,我相信面试官一定会对你刮目相看,除非你遇到了一个假的面试官。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翁松秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值