[每日一题] 12. 把字符串转换为成整数(字符串、迭代器、多方法)

1. 题目来源

链接:把字符串转换成整数
来源:牛客网

2. 题目说明

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

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

输出描述:

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

示例1

输入
+2147483647
1a33
输出
2147483647
0

3. 题目解析

本题本质是模拟实现实现C库函数atoi,不过参数给的string对象
解题思路非常简单,就是上次计算的结果10,相当于10进制进位,然后加当前位的值。
例如:“123”转换的结果是
sum=0
sum
10+1->1
sum10+2->12
sum
10+3->123
本题的关键是要处理几个关键边界条件
1. 空字符串
2. 正负号处理
3. 数字串中存在非法字符
4. 溢出处理

刚好也是在[C++系列] 50. 迭代器及string类OJ练习遇到了这道题,并且采用了三种方式详细的解决了该问题,具有较大参考价值。在此就简单写该OJ要求的一种方法吧。

4. 代码展示

class Solution {
public:
    int StrToInt(string str) {
        long long ret = 0;        // OJ中注意 整数越界问题不要采用int赋值,在此long即可
        int flag = 1;
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] == '-' || str[i] == '+')
            {
                if (str[i] == '-')
                    flag = -1;
            }
            else if (str[i] >= '0' && str[i] <= '9')
            {
                ret *= 10;
                ret += str[i] - '0';
            }
            else
            {
                return 0;
            }

        }
        // 若将ret设置为int型,则该判断无效,编译器内部进行优化
        if (((ret >= 2147483649) && (flag == -1))|| (ret * flag >= 2147483648))
            return 0;
        else
            return ret * flag;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ypuyu

如果帮助到你,可以请作者喝水~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值