zoukankan      html  css  js  c++  java
  • 实现atoi函数

    atoi函数最关键的地方是想好测试用例:

    • 输入为空字符串,输出为0;
    • 输入字符串大小超过INT_MAX输出INT_MAX;
    • 输入字符串大小小于INT_MIN输出INT_MIN;
    • 输入字符串中含有不规则字符,中断atoi, 如"01a4" 输出1;
    • 输入字符串开头和结尾含有空格,忽略空格,如输入"  +01  "输出1;
    • 输入字符串开头除空格以外如果是"+"和"-",视为正确输入。
    class Solution {
    public:
        int atoi(const char *str) {
            if(strlen(str)==0) return 0;
            double result=0;
            int j=0;
            while(str[j]==' ')  //忽略字符串首空格
            {
                j++;
            }
            int last = strlen(str)-1;
            int last_space = 0;
            while(str[last]==' ') //忽略字符串尾空格
            {
                last--;
                last_space++;
            }
            if(str[j]=='+')
            {
                for(int i=j+1;i<strlen(str)-last_space;i++)
                {
                    if(str[i]>='0'&&str[i]<='9')
                    {
                        result = result*10 + (str[i]-'0');
                    }
                    //如果遇到非法字符,终止转换
                    else
                    {
                        break;
                    }
                }
                if(result>INT_MAX)
                {
                    return INT_MAX;
                }
                else
                {
                    return result;
                }
            }
            if(str[j]=='-')
            {
                for(int i=j+1;i<strlen(str)-last_space;i++)
                {
                    if(str[i]>='0'&&str[i]<='9')
                    {
                        result = result*10 + (str[i]-'0');
                    }
                    else
                    {
                        break;
                    }
                }
                if(result*(-1) < INT_MIN)
                {
                    return INT_MIN;
                }
                return result*(-1);
            }
            for(int i=j;i<strlen(str)-last_space;i++)
            {
                if(str[i]>='0'&&str[i]<='9')
                {
                    result = result*10 + (str[i]-'0');
                }
                else
                {
                    break;
                }
            }
            if(result>INT_MAX)
            {
                return INT_MAX;
            }
            if(result*(-1) < INT_MIN)
            {
                return INT_MIN;
            }
            return result;
        }
    };
  • 相关阅读:
    C# 委托事件
    用netstat查看网络状态详解
    详解TCP建立连接全过程
    Amazon SNS移动推送更新——新增百度云推送和Windows平台支持
    UE-9260使用说明2
    简单理解javascript中的原型对象,实现对之间共享属性和行为
    RxJava
    链式存储(头插法、尾插法)
    Codeforces 569 B. Inventory
    CentOS 6.4安装Puppet
  • 原文地址:https://www.cnblogs.com/hubavyn/p/4150106.html
Copyright © 2011-2022 走看看