JZ49_把字符串转换成整数

JZ49_把字符串转换成整数

知识点:字符串、基础范围
题目链接

题目描述

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

输入描述:
输入一个字符串,包括数字字母符号,可以为空

返回值描述:
如果是合法的数值表达则返回该数字,否则返回0

输入: “+2147483647”
输出: 2147483647

解题思路

  1. int的范围是 [231 -1 , -231]
  2. 首先判断这个数的正负,如果正数,超过了INT_MAX,就设置为INT_MAX
  3. 如果是负数,且超过了INT_MAX+1, 则就置为INT_MAX+1, 最后再根据正负号,来加负号。

代码

#include "cheader.h"
class Solution {
public:
    int StrToInt(string str) {
        int len = str.size();
        if(len == 0)
            return 0;
        int index = 0;
        //判断最前面是不是数字、正号、负号中的一种
        if(isdigit(str[index])==0&&str[index]!='+'&&str[index]!='-')
            return 0;
        bool symbol = true;
        //标记符号
        if(str[index] == '-')
            symbol = false;
        long long ans = 0L;
        //去除符号
        if(isdigit(str[index]) == 0)
            index ++;
        while(index < len){
            if(isdigit(str[index]) == 0)
                return 0;
            ans = ans* 10 + str[index]- '0';
            index++;
            //如果大于INT_MAX,且是正数
            if(symbol && ans > INT_MAX){
                ans = INT_MAX;
                break;
            }
            //大于INT_MAX+1,且是负数,我们知道负数的绝对值比正数大
            if(symbol == false && ans > 1L + INT_MAX){
                ans = 1L + INT_MAX;
                break;
            }
        }
        if(symbol == false)
            return static_cast<int>(-ans);
        else
            return static_cast<int>(ans);
    }
};


今天也是爱zz的一天!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值