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

    
    
    #include<iostream>
    #include <stdio.h> 
    #include <stack> 
    #include <string> 
    #include <vector>
    #include <math.h>
    #include <limits.h>  
    
    using namespace std;
    
    
    bool invalid_input = false;
    
    long long aoti_core(const string& str, int end, int start) {
        
        long long str2int = 0;
        for (int i = end; i >= start; i--) {
            // size_t
            if (str[i] - '0' >= 0 && str[i] - '0' <= 9) {
                str2int += (str[i] - '0') * pow(10, str.length()-1-i);
            }
            else {
                  invalid_input = true;
                return -1;
            }
        }
        return str2int;
    }
    
    int atoi_fuc(const string& str) {
        long long str2int = 0;
        if (str.length() == 1) {
            if (str[0] - '0' < 0 || str[0] - '0' > 9 ) {
                invalid_input = true;
                return -1;
            }
        }
        else {
            if (str[0] == '-') {
                str2int = aoti_core(str, str.length()-1, 1);
                if (!invalid_input) {
                    if (0-str2int < INT_MIN) {
                        throw("invalid int");
                    }  
                } 
                return (int) (0-str2int); 
            }
            else if (str[0] == '+') {
                str2int = aoti_core(str, str.length()-1, 1);
                if (!invalid_input) {
                    if (str2int > INT_MAX) {
                        throw("invalid int");
                    }  
                } 
                return (int) str2int; 
            }
            else {
                str2int = aoti_core(str, str.length()-1, 0);
                if (!invalid_input) {
                    if (str2int > INT_MAX) {
                        throw("invalid int");
                    }
                }
                return (int) str2int;  
            }
        }
        return (int) str2int;  
    }
    
    
    int main()
    {
        const string str = "+01212";
        // 边界处理
        // 1、单一字符
        // 2、输入非法数字
        // 3、负数
        // 4、"+11212" 也是一个有效输入
        // 4、大于int 类型最大值;或小于 int类型最小值
    
        int str2int = atoi_fuc(str);
        cout << str2int << endl;
        
        return 0;
    }
  • 相关阅读:
    软解析和硬解析
    oracle存储过程常用技巧
    jquery-1.11.1.js
    JavaScript遍历table
    JavaScript向select下拉框中添加和删除元素
    glog
    DDL引发的对象invalidation
    模拟cursor pin S wait on X
    rsync 排除目录
    JavaScript解决select下拉框中的内容太长显示不全的问题
  • 原文地址:https://www.cnblogs.com/TMatrix52/p/12593454.html
Copyright © 2011-2022 走看看