算法 - 字符串 给一个包含整数的字符串,把它转换成整形
这道题目是这样的
给定一个整数的字符串(例如:“4872”, “+32455”, ‘-3243243245325432532’, “abc123”, “123abc”),把这个字符串转换成Int类型, 输出为(4872, 32455, -2147483648,0, 123 )。(请不要用任何现有的API,类似int.Parse, int.TryParse, Integer.ParseInt 等) => 我们来看这个题干:
输入字符串规则:
"4872"→4872"+32455"→32455"-3243243245325432532"→int.MinValue也就是-2147483648(溢出返回 int 最小值)"abc123"→0(开头不是数字 / 正负号,直接返回 0)"123abc"→123(读到非数字字符就停止,返回前面解析出来的数字)- 禁止使用
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 中的实现

好了,现在开始写代码
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; } }
浙公网安备 33010602011771号