算法 - 字符串 给一个包含整数的字符串,把它转换成整形

这道题目是这样的

给定一个整数的字符串(例如:“4872”, “+32455”, ‘-3243243245325432532’, “abc123”, “123abc”),把这个字符串转换成Int类型, 输出为(4872, 32455, -2147483648,0, 123 )。(请不要用任何现有的API,类似int.Parse, int.TryParse, Integer.ParseInt 等)  =>   我们来看这个题干:

输入字符串规则:

  1. "4872" → 4872
  2. "+32455" → 32455
  3. "-3243243245325432532" → int.MinValue 也就是 -2147483648(溢出返回 int 最小值)
  4. "abc123" → 0(开头不是数字 / 正负号,直接返回 0)
  5. "123abc" → 123(读到非数字字符就停止,返回前面解析出来的数字)
  6. 禁止使用 int.Parse / TryParse 等内置转换 API,手动实现。 int 范围:[-2147483648, 2147483647],溢出直接返回 int.MinValue

可以看出以下几点

1.  这个字符串第一个字符只能有3种情况 '+', '-', 数字;  => +开头代表正数,-开头代表负数, 数字开头当然也是正数, 如果其他开头,直接返回0

2. 最后的结果,要做int范围 int.MaxValue 和 int.MinValue判断,正负数不能超过这个范围

3. 像 123abc这种,要返回123,应该想到另一个字符串算法题  -https://www.cnblogs.com/wphl-27/p/23132863 中的实现

image

 好了,现在开始写代码

 

public class Solution
{
    public int ConvertStringToInt(string str)
    {
        if(string.IsNullOrEmpty(str)) return 0;

        int index = 0;
        int strLen = str.Length;
        long result = 0; // 使用long类型来存结果,避免溢出
        var isNegative = false;

        if(str[index] == '-')
        {
            isNegative = true;
            index++;
        }
        else if(str[index] == '+')
        {
            index++;
        }
        else if(str[index] < '0' || str[index] > '9')
        {
            return 0; // 非法输入,返回0
        }
        else
        {
            // 继续处理数字
            while(index < strLen)
            {
                if(str[index] >= '0' && str[index] <= '9')
                {
                    result = result * 10 + (str[index] - '0');
                    index++;
                }
                else
                {
                    break; // 遇到非数字字符,停止处理
                }
            }
        }

        if(!isNegative && result > int.MaxValue)
        {
            return int.MaxValue; // 超过int范围,返回最大值
        }
        else if(isNegative && -result < int.MinValue)
        {
            return int.MinValue; // 超过int范围,返回最小值
        }
      
        if(negative)
        {
            result = -result;
        }

        return (int)result;
        
    }
}

 

posted on 2026-09-27 16:03  新西兰程序员  阅读(1)  评论(0)    收藏  举报