把字符串转换成整数

1、题目描述

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

2、代码

2.1 原理:
这个题目从题目本身上来说是不难的,但是主要是需要注意一些特殊的情况需要加以判断,以下是一个需要考虑的特殊情况:
(1)如果输入的字符串是空的字符
(2)如果输入是带正负号的字符串
(3)在(2)的基础上,如果只有一个字符,且这个字符就是+-号
(4)如果字符串的数值超过了整数的最大范围,如何处理,这里最好一开始就用long long int的数值类型。
一般是刷题的时候,网上提交的时候,如果函数的形式实现设定好了,就只需要考虑前面三点了,但是如果是自己写代码,就需要注意后面的几点了。

2.2 代码:

//将字符串转化成整数
class Solution1 {
public:
    bool bSucceed;
    int StrToInt(string str) {
        bSucceed = true;
        if(str.empty())
        {
            bSucceed = false;
            return 0;
        }


        //只输入一个正号或者是负号
        if(str.size()==1 && (str[0]=='+' || str[0]=='-'))
        {
            bSucceed = false;
            return 0;
        }

        auto size = str.size();
        auto c = str[0];
        int num=0;
        bool temp=false;        //判断是否为负数
        for(auto i=0;i<size;i++)
        {
            if(i==0)
            {
                if(c=='+' || c =='-' || (c>='0'&&c<='9'))
                {
                    if(c=='-')
                        temp=true;
                    else if(c>='0'&&c<='9')
                        num=num*10+(c-'0');
                }
                else
                {
                    bSucceed = false;
                    return 0;
                }

            }
            else
            {
                if(str[i]>='0'&&str[i]<='9')
                    num=num*10+str[i]-'0';
                else
                {
                    bSucceed = false;
                    return 0;
                }
            }
        }
        if(temp)
            num*=-1;
        return num;
    }
};
3 扩展:将字符串转化成小数

转化成小数,需要考虑到小数点,以及小数点后的数据的位数。

//将字符串转化成小数
class Solution {
public:
    double StrToInt(string str) {
        if(str.empty())
            return 0;
        auto size = str.size();
        auto c = str[0];
        double num=0;
        bool temp=false;        //判断是否为负数
        bool bBool = false;    //小数是否标志位
        int times=0;   //记录小数点后数据的位数
        for(auto i=0;i<size;i++)
        {
            if(i==0)
            {
                if(c=='+' || c =='-' || (c>='0'&&c<='9'))
                {
                    if(c=='-')
                        temp=true;
                    else if(c>='0'&&c<='9')
                        num=num*10+(c-'0');
                }
                else
                    return 0;

            }
            else
            {
                if(str[i]>='0'&&str[i]<='9')
                { 
                    if(!bBool)      //小数点之前
                        num=num*10+str[i]-'0';
                    else  //小数点后
                    {
                        times--;
                        num=num+(str[i]-'0')*pow(10, times);
                    }
                }
                else if(str[i]=='.')
                {
                    if(bBool==false)
                        bBool=true;
                    else  //如果之前出现过小数点
                        return 0;
                }
                else
                    return 0;
            }
        }
        if(temp)
            num*=-1;
        return num;
    }
};
写在最后:

做这一类的题目,最需要注意的点:首先考虑特殊情况,将所有的特殊情况尽量考虑的清楚点,思路一定要清晰了再开始写代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值