字符串转换为整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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;
    }
};
 
拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
原文地址:https://www.cnblogs.com/dd2hm/p/7445530.html