【LeetCode & 剑指offer刷题】字符串题6:67 把字符串转成整数

【LeetCode & 剑指offer刷题】字符串题6:67 把字符串转成整数

【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

67 把字符串转成整数

题目描述

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

输入描述:

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

输出描述:

如果是合法的数值表达则返回该数字,否则返回0
示例1

输入

复制
+2147483647
1a33

输出

复制
2147483647
0
 
 
/*
本题没有考虑前面有空格的情况,与leetcode中题目有点不同
而且把1a33这样的字符也当做异常,不会输出1
1. 处理正负号
2. 处理数字
3. 处理溢出
4. 处理夹杂异常字符的情况
*/
#include <climits>
class Solution
{
public :
    int StrToInt ( string str )
    {
        if ( str . empty ()) return 0 ; //处理异常情况
       
        int sign = 1 ; //初始化符号
        int i = 0 ;
        if ( str [ i ] == '-' ) //处理正负号
        {
            sign = - 1 ;
            i ++;
        }
        else if ( str [ i ] == '+' )
            i ++;
       
        long long num = 0; //long long不管在32位机还是64位机中均为64位
        for (; i < str . size () && str [ i ] >= '0' && str [ i ] <= '9' ; i ++) //扫描数字
        {
            int digit = str [ i ] - '0' ;
            num = num * 10 + digit ;
            //处理溢出问题
            if ( ( sign > 0 && num > INT_MAX ) || ( sign < 0 && - num < INT_MIN ) )
            {
                num = 0 ;
                break ;
            }
        }
       
        if ( i < str . size ()) num = 0 ; //说明是从中途退出,有异常字符
        return num *sign;
    }
};
 

 

posted @ 2019-01-05 15:53 wikiwen 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值