• 字符串转换成整数


    题目描述

    输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"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;
    }
  • 相关阅读:
    [转]oracle 12c 中的分页子句
    display:table; 也可以实现 div 始终和内包的图片大小相同
    mongodb与SQL常见语句对照
    js生成验证码
    javascript 判断空数组
    网络绘制插件
    mongodb中查询返回指定字段
    Mybatis获取插入记录的自增长ID
    mysql 创建索引和删除索引
    Java 中 HashMap 初始化时赋值
  • 原文地址:https://www.cnblogs.com/ddddddwwwxx/p/5527211.html
Copyright © 2020-2023  润新知