zoukankan      html  css  js  c++  java
  • 字符串转换成整数

    题目描述

    输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。

    给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi。

    注意一下几点:

    1. 空指针输入:输入的是指针,在访问空指针时程序会崩溃,因此在使用指针之前需要先判断指针是否为空。
    2. 正负符号:整数不仅包含数字,还有可能是以'+'或'-'开头表示正负整数,因此如果第一个字符是'-'号,则要把得到的整数转换成负整数。
    3. 非法字符:输入的字符串中可能含有不是数字的字符。因此,每当碰到这些非法的字符,程序应停止转换。
    4. 整型溢出:输入的数字是以字符串的形式输入,因此输入一个很长的字符串将可能导致溢出。

    完整参考代码如下:(溢出可以使用long long类型或者不用也可以)

    int strtoint(char *str)
    {
        int MAX_INT = (unsigned)~0 >> 1;
        int MIN_INT = -((unsigned)~0 >> 1) - 1;
    
        int sign = 1;
        int res = 0;
    
        if(str == 0)
        {
            return 0;
        }
    
        while(isspace(*str))
        {
            ++str;
        }
    
        if(*str == '-')
        {
            sign = false;
            ++str;
        }
        else if(*str == '+')
        {
            ++str;
        }
    
    
        while(isdigit(*str))
        {
            int temp = *str - '0';
            if(sign && (res > MAX_INT / 10 || res == MAX_INT / 10 && temp > MAX_INT % 10))
            {
                return MAX_INT;
            }
    
    
            if(!sign && (res > (unsigned)MIN_INT / 10 || res == (unsigned)MIN_INT / 10 && temp > (unsigned)MIN_INT % 10))
            {
                return MIN_INT;
            }
    
            res = res * 10 + temp;
            ++str;
        }
    
        return sign ? res : -res;
    }
    int myAtoi(string str) {
        long long res = 0;
        int i = 0;
        bool flag = true;
        while(str[i] == ' ')
        {
            ++i;
        }
        if(str[i] == '-')
        {
            flag = false;
            ++i;
        }
        else if(str[i] == '+')
        {
            flag = true;
            ++i;
        }
        int temp = 0;
        for(; i < str.size(); ++i)
        {
            if(str[i] >= '0' && str[i] <= '9')
            {
                res = res * 10 + str[i] - '0';
                if(flag && res > INT_MAX)
                {
                    return INT_MAX;
                }
                else if(!flag && -res < INT_MIN)
                {
                    return INT_MIN;
                }
            }
            else
            {
                return flag ? res : -res;
            }
        }
    
        return flag ? res : -res;
    }
  • 相关阅读:
    在thinkphp中批量生成Word并压缩打包下载
    使用phpExcel实现Excel数据的导入导出(完全步骤)
    HTML的几种触发
    IOS上iframe的滚动条失效的解决办法。
    VC6下安装与配置OpenCV1.0
    VS2010+Opencv2.4.0的配置攻略
    could not find the main class
    Makefile 教程
    第一个小程序——显示图像
    自建CDib类库
  • 原文地址:https://www.cnblogs.com/ddddddwwwxx/p/5527211.html
Copyright © 2011-2022 走看看