字符串转化为数字

问题:输入一个整数字符串,把该字符串转化为整数并输出。

思路:需考虑几点:

1、输入字符串是否为空

2、结果是否能被整数表示

3、开头字符为符号

#include <iostream>
#include<assert.h>
#include<string.h>
#include<limits.h>

using namespace std;

//全局变量用来标记输入的字符串是否可以转化为整数
enum State {kValid=0,kInvalid};
int g_state=kValid;

int strToIntf(const char * a)
{
    //初始化g_state为kInvalid
    g_state=kInvalid;
    long long num=0;
    //断言a为非空
    if(a!=NULL)
    {
        //cout<<g_state<<endl;
        const char *digit=a;
        bool minus=false;
        //判断符号
        if(*digit=='+')
        {
            digit++;
        }
        else if(*digit=='-')
        {
            digit++;
            minus=true;
        }
        while(*digit!='\0')
        {
            if(*digit>='0' && *digit<='9')
            {
                //cout<<*digit<<endl;
                num=10*num+(*digit-'0');
                //cout<<num<<endl;
                if(num>INT_MAX||num<INT_MIN)
                {
                    num=0;
                    break;
                }
                digit++;
            }
            else
            {
                num=0;
                break;
            }
        }
        if(*digit=='\0')
        {
            g_state=kValid;
            //cout<<a<<endl;
            if(minus)
                num=0-num;
        }
    }
    return num ;
}
int main()
{
    char s1[100]="";
    char s2[100]="-12345";
    char s3[100]="123456789201234556322";
    char s4[100]="+123";
    char s5[100]="+1=2a3";
    cout<<"INT_MAX:"<<INT_MAX<<endl;
    cout<<"INT_MIN:"<<INT_MIN<<endl;
    cout<<strToIntf(s1)<<endl;
    cout<<strToIntf(s2)<<endl;
    cout<<strToIntf(s3)<<endl;
    cout<<strToIntf(s4)<<endl;
    cout<<strToIntf(s5)<<endl;
    return 0;

}

输出结果:

INT_MAX:2147483647
INT_MIN:-2147483648
0
-12345
0
123
0


猜你喜欢

转载自blog.csdn.net/u013069552/article/details/80897918