zoukankan      html  css  js  c++  java
  • atoi函数的实现——面试

    主要考虑,字符串中是否有非法字符,字符串是否有溢出控制

    #include<stdio.h>
    
    int myatoi(const char *str){
        int sight=1,ret=0,i=0;
        if(str[i]==' ')i++;
        int max=(1<<31)-1;
        if(str[i]=='+'||str[i]=='-'){
            if(str[i]=='-')sight=-1;
            i++;
        }
        
        for(i=0;str[i]>='0'&&str[i]<='9';i++){
            ret*=10;
            ret+=str[i]-'0';
            if(ret>max){//溢出控制
                ret=max;break;
            }
        }
        return ret*sight;
    }
    
    int main(){
        printf("%d
    ",myatoi("214748.3649"));
    }
    View Code

    后来仔细想想发现自己的代码弱爆了!

    改变如下:

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    
    int myatoi(char *str){
        if(NULL == str)return 0;//处理空指针,加强程序的鲁棒性
        int sight=1,ret=0,i=0;
    
        while(str[i]==' ')i++;//处理字符串开始的空格
    
        if(str[i]=='+'||str[i]=='-'){ //处理正负号
            if(str[i]=='-')sight=-1;
            i++;
        }
    
        for(;str[i]>='0'&&str[i]<='9';i++){
            ret*=10;
            ret+=str[i]-'0';
            if(ret<0){//溢出控制
                return 0;
            }
        }
    
        return ret*sight;
    }
    
    
    int main(){
        char *s=NULL;
        printf("%d
    ",myatoi(s));
        printf("%d
    ",myatoi("   -123189267q    2e.1"));
        getchar();
        return 0;
    }
  • 相关阅读:
    03-树2 List Leaves (25 分)
    03-树1 树的同构 (25 分)
    12宏
    11.代码测试、维护
    10代码编辑、编译、审查
    9.质量保证
    02-线性结构4 Pop Sequence (25 分)
    8程序效率
    7可测性
    Linux-文件权限管理
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3434083.html
Copyright © 2011-2022 走看看