8、字符串转换整数--atoi算法(C#)

        大家早上好,今天这道题目呢,题干小编我也是读了好久才读懂,实际上这题比较简单,就是把题干翻译成代码即可,下面让我们一起看看这一题吧!

关卡八:字符串转换整数--atoi算法

        请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个32位有符号整数。

        算法:

        示例:

我的分析 

         题目呢,非常的长啊!但大家不要怕,大家先理解一下,我们前面讲可以将新建一个StringBuilder对象,然后先将整数转为字符串存到一个List里面,然后将整个List采用Reverse()方法反转,最后再存入StringBuilder中,在转为字符串,最后转回整型。但是这一题给了如此多的判断条件怎么办呢?那就需要我们一步一步的拆分了,话不多说,我们直接看代码。

代码示例

public class Solution {
    public int MyAtoi(string str) {
        //提取有效数字符号字符
        var numberStr = GetNumberStr(str);
        //转换成数字
        var number = GetNumber(numberStr);
        return number;
    }

    private int GetNumber(string numberStr)
    {
        if (numberStr.Length < 1) return 0;
        var minus = numberStr[0] == '-';
        //如果第一位不是数字就必须长度为1以上
        if (!char.IsNumber(numberStr[0]) && numberStr.Length < 2) return 0;
        //程序开发中,免不了不同数据类型之间的转换。C#中针对转换有了一个TryParse的方法。如果转换成功则返回true。否则返回falseint.TryParse(string s,out int i) 的参数: s是要转换的字符串,i 是转换的结果
        if (!long.TryParse(numberStr, out var number)) return minus ? int.MinValue : int.MaxValue;
        //判断是否超过范围
        if (number > 2147483647L) return int.MaxValue;
        if (number < -2147483648L) return int.MinValue;
        return (int)number;
    }

    private string GetNumberStr(string str)
    {
        var index = 0;
        //得到第一个有效字符[+,-,0-9]位置
        while (str.Length > index && char.IsWhiteSpace(str[index])) index++;
        //如果超过范围或者第一位非符号或者数字就返回空
        if (str.Length <= index || (!char.IsNumber(str[index]) && str[index] != '-' && str[index] != '+')) 
            return string.Empty;
        var numberStrBuilder = new StringBuilder(str.Length);
        do
        {
            numberStrBuilder.Append(str[index]);
            index++;
        } while (str.Length > index && char.IsNumber(str[index]));
        //构建数字字符串
        return numberStrBuilder.ToString();
    }
}
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想摘月亮送给你

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值