字符串转为int类型

题目:

字符串转为int类型

解析:

题目比较简单,重要的是要思考全面,所以这里不过多赘述

注意:

1 判断字符串是否为空

2 判断正负号

3 判断字符串转换是否超出int类型表示范围

4 如果转换出错,返回什么(博客中返回0,设置标志位,判断0是正常返回0,还是转换出错返回0)


算法实现:

enum Status {KVilid = 0,KInVilid};
Status gStatus = KVilid;

int StrToInt(const char* str)
{
    gStatus = KInVilid;
    long long int num = 0;

    //如果字符串为空,则返回0,gStatus标识设为KInVilid
    if(nullptr == str || strlen(str) < 1)
    {
        return static_cast(num);
    }

    const char* digit = str;
    bool minus = false;

    //判断正负号
    if('+' == *digit)
    {
        ++digit;
    }
    else if('-' == *digit)
    {
        minus = true;
        ++digit;
    }


    //str转换为数字
    while('\0' != *digit)
    {
        //如果字符串内字符不合法,则num设为0,gStatus设为KInVilid
        if(*digit > '9' || *digit < '0')
        {
            num = 0;
            break;
        }

        num = num * 10 + (*digit - '0');

        //判断是否超出int表示范围
        if(num > std::numeric_limits::max())
        {
            num = 0;
            break;
        }
        ++digit;
    }

    if('\0' == *digit)
    {
        gStatus = KVilid;
        if(minus)
        {
            num = 0 - num;
        }
    }
    return static_cast(num);
}


算法测试代码:

#include 


using namespace std;

enum Status {KVilid = 0,KInVilid};
Status gStatus = KVilid;

int StrToInt(const char* str)
{
    gStatus = KInVilid;
    long long int num = 0;

    //如果字符串为空,则返回0,gStatus标识设为KInVilid
    if(nullptr == str || strlen(str) < 1)
    {
        return static_cast(num);
    }

    const char* digit = str;
    bool minus = false;

    //判断正负号
    if('+' == *digit)
    {
        ++digit;
    }
    else if('-' == *digit)
    {
        minus = true;
        ++digit;
    }


    //str转换为数字
    while('\0' != *digit)
    {
        //如果字符串内字符不合法,则num设为0,gStatus设为KInVilid
        if(*digit > '9' || *digit < '0')
        {
            num = 0;
            break;
        }

        num = num * 10 + (*digit - '0');

        //判断是否超出int表示范围
        if(num > std::numeric_limits::max())
        {
            num = 0;
            break;
        }
        ++digit;
    }

    if('\0' == *digit)
    {
        gStatus = KVilid;
        if(minus)
        {
            num = 0 - num;
        }
    }
    return static_cast(num);
}



void TestStrToInt(const char *str,int n)
{
    if(gStatus == KVilid)
    {
        cout<<"str ="<

运行结果:

         字符串转为int类型_第1张图片


你可能感兴趣的:(算法)