• 50把字符串转换成整数


    题目描述

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
    输入描述:
    
    输入一个字符串,包括数字字母符号,可以为空
    
    输出描述:
    
    如果是合法的数值表达则返回该数字,否则返回0
    
    示例1
    输入
    
    +2147483647
        1a33
    
    输出
    
    2147483647
        0

    这道题目真的很简单,不要畏难!!嘿嘿。。。

    思路:这道题其实没有想象的那么多的边界条件,也没有那么繁琐。首先理解题目意思,是字符串转换为整数,不是小数,没有小数点或科学计数法的考量。

    然后一个字符转换为整数的方法是,res = res * 10 + str[i] - '0';

    边界情况

    1)开始都是空格

    2)考量第一个出现的字符是+,-

    3)转换的数字大于INT_MAX,小于INT_MIN。

    4)出现其他非数字字符。

    使用一个全局变量记录是否是输入错误,因为return 0有很多种情况,也可能是字符串就一个0,返回也是0,因此需要设置一个变量区分开来。

    class Solution {
    public:
        bool valid = true;
        int StrToInt(string str) {        
            int head = 1;
            if(str.empty()){
                return 0;
            }
            int i = 0;
            for(i = 0;i < str.size();++i){//去掉前面的空格
                if(str[i] == ' '){
                    continue;
                }
                else{
                    break;
                }
            }
            if(str[i] == '+'){//第一个字符是正号
                head = 1;
                ++i;
            }
            else if(str[i] == '-'){//第一个字符是负号
                head = -1;
                ++i;
            }
            //转换数字
            int res = 0;
            
            for(i;i < str.size();++i){
                if((head == 1) && (res > INT_MAX) 
                   || (head == -1) && (res < INT_MIN)){//转换的字符大于计算机表示位数
                    res = 0;
                    valid = false;
                    return res;
                }
                if((str[i] - '0' >= 0) && (str[i] - '0' <= 9)){
                    res = res * 10 + str[i] - '0';
                }
                else{//出现其他的非数字字符
                    res = 0;
                    valid = false;
                    return res;
                }
                
            }
            return head * res;
        }
        
    };
  • 相关阅读:
    上传图片,语音,和富文本(webuploader,dropzone, froala)
    java代码备份mysql数据库
    maven 父子工程打包 并且上传linux服务器
    docker+fastdfs+nginx 实现分布式大文件存储系统以及视频缓存播放
    docker eureka 注册中心 服务提供者通信机制
    lvs dr 模型配置详解
    spring cloud 详解
    JS前端创建CSV或Excel文件并浏览器导出下载
    修改ElementUI源码实践
    Leaflet+heatmap实现离线地图加载和热力图应用
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8279252.html
Copyright © 2020-2023  润新知