将字符串转换为整数

/*该问题的知识点

 1. 对于c风格的字符串来说,结尾标志位‘\0’

 2. 将纯数字字符串转换为整数,需要依次的拿前一个字符生成的数字乘以10 ,再加上当前字符和‘0’的差

 3. 对于特殊情况的处理

    空字符数组;

    字符串中间有空格,字符串前面会有很多空格

    字符串中间存在不合法字符

    字符串第一个非空字符为‘-’或者‘+’

    对于最大正整数,最小负整数的判断

 */


#include <iostream>

#include <limits.h>


using namespace std;


int str2int(const char *s);


int StrToInt(const char *s){

    if(s == NULL) return -1;

    const int int_max = INT_MAX;

    const int int_min =INT_MIN;

    int flag = 0;

    

    

    long result = 0;

    while (*s != '\0') {

        if (*s == ' ') {

            ++s;

            continue;

        }

        

        //检测到第一个不是空格的字符

        if (flag == 0 ) {

            if (*s == '-') {

                flag = -1;

                ++s;

                continue;

            }else if (*s == '+' ){

                flag = +1;

                ++s;

                continue;

            }

            else if(*s>='0' && *s<= '9'){

                flag = 1;

                result = flag * (*s-'0');

                cout<<result<<endl;

                ++s;

                continue;

            }else{

                cerr<<"符号位出现不合法字符"<<endl;

                return -1;

            }

            

        }

        

        if(*s < '0' || *s > '9'){

            cerr<<"数字位出现不合法字符"<<endl;

            return -1;

        }

        

        

        if (flag ==  1) {

            result = result*10 + (*s - '0');

        }else if(flag == -1)

            result = result*10 - (*s - '0');

        

        

        if (result > int_max || result < int_min) {

            cerr<<"超出最大正整数和最小付整数"<<endl;

            return -1;

        }

        ++s;

    }

    

    return (int)result;

}


int main(int argc, const char * argv[]) {

    const char *instring = " +1 2 344599";

    cout<<"结果是:"<<StrToInt(instring)<<endl;

    cout<< str2int(instring)<<endl;

    return 0;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值