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;
    }
  • 相关阅读:
    ubuntu更换阿里源
    记一次开源软件的篡改
    linux下搜索指定内容
    随笔_1
    单细胞中的细胞类型划分
    scDNA-seq genomic analysis pipline
    NIH周三讲座视频爬虫
    ggplot2_bubble
    TCGA数据批量下载
    lncRNA芯片重注释
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3434083.html
Copyright © 2011-2022 走看看