• 字符串转换为整数


    题目描述

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

    输入描述:

    输入一个字符串,包括数字字母符号,可以为空

    输出描述:

    如果是合法的数值表达则返回该数字,否则返回0

    class Solution {
    public:
        int StrToInt(string str) {
            int len=str.size();
            if(str=="0" || len==0)    return 0;
            int num=0;
            int i=0;
            int flag;
            if(str[0]<='9' && str[0]>='0') {
                flag=1;
            }
            if(str[0]=='+') {
                flag=1;
                i++;
            }
            if(str[0]=='-') {
                flag=-1;
                i++;
            }
            
            for(;i<len;i++) {
                if(str[i]<='9' && str[i]>='0') {
                    num=num*10+(str[i]-'0');
                }
                else {
                    return 0;
                }
            }
             return flag*num;
        }
    };

      if(str=="0" || len==0) return 0;此处改成这样的话,可以优化一点。

    /*
    C++ 实现
    看起简单的一道题,却要注意处理各种非法输入的问题,如下:
    1.str.size()==0
    2.str里只有一个空字符
    3.str里有非0到9的数字、非正号、非负号 的符号
    4.溢出:负整数的最小值为0x7FFFFFFF,正整数的最大值为0x80000000,注意边界值
    */
    class Solution {
    public:
        bool isInvalid=false;//全局变量,标志位的作用
        int StrToInt(string str)
        {
            int length=str.size();
            if(length==0)
                return 0;
            int start=0;
            bool Above0=true;
            int num=0;
            if(str[0]=='+')//正负号只可能出现在第一位,出现在其他地方即非法。
            {
                start=1;
                Above0=true;
            }
            else if(str[0]=='-')
            {
                start=1;
                Above0=false;
            }
             
            for(int i=start;i<length;i++)//字符转为整型
            {
                 
                if(str[i]>='0'&&str[i]<='9')
                    num=10*num+str[i]-'0';
                else
                    return 0;
            }
            if(num==0)//如果输入的值为0,此情况是合法输入!
                isInvalid=true;
            if(Above0==false)
                num=-num;
             
            //边界值!int类型的最大正数:0x7fffffff;int类型的最小负数:0x80000000。
            if(num<=0x7FFFFFFF&&num>=(signed int)0x80000000)
            {
                return num;
            }
            return 0;
        }
    };
     
    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    大规模机器学习
    机器学习之推荐系统
    SVM实现邮件分类
    机器学习之异常检测
    降维算法学习
    手写数字识别实现
    动态规划训练之十七
    概率期望训练之三
    数据结构训练之四
    绵阳东辰国际test201910.25
  • 原文地址:https://www.cnblogs.com/dd2hm/p/7445530.html
Copyright © 2020-2023  润新知