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;
    }
  • 相关阅读:
    G++ 中文使用教程[转]
    PreparedStatement是如何大幅度提高性能的[转]
    .net 2.0(c#)下简单的FTP应用程序
    Remoting服务集成到IIS的简单总结
    转:xml一些知识
    [翻译]简单谈谈事件与委托 (转)
    觉得不错
    winform的一些知识
    xml 基本语法
    简单的信息采集程序示例(小偷程序) (转)
  • 原文地址:https://www.cnblogs.com/TMatrix52/p/12593454.html
Copyright © 2011-2022 走看看