
LeetCode: String to Integer (atoi)
空字符串或 null:如果输入的字符串是空的或 非空字符:首先需要跳过前导空白字符,直到遇到第一个非空白字符。 符号字符:符号字符可以是 数字符号:数字符号只能从0到9组成,可以有多个数字符号。 无效字符:如果字符串中存在其他字符(如字母),则无法转换为有效的整数。 溢出处理:如果转换后的数值超过整数的范围,则返回 科学计数法:虽然这可能超出了本题的要求,但需要注意不要误解这样形式的字符串。 多个符号字符:如 空字符串检查:首先检查输入的字符串是否为空。如果是空的,返回0。 空白符处理:忽略字符串中的前导空白符,直到遇到第一个非空白符。 符号字符处理:检查当前字符是否是符号。如果是,将符号保存下来,继续处理后续数字部分。如果有多个符号字符出现,视为无效输入,返回0。 数字符号处理:逐个处理数字符号,将它们组合成一个整数值。 ** oversees cases**:检查是否存在多个符号字符或其他无效字符,视为无效输入。 溢出处理:在处理到最大或最小值时,返回 返回结果:若所有字符都已处理且为有效数值,则返回整数值。否则,返回0。
发布日期:2025-04-05 03:43:54
浏览次数:7
分类:精选文章
本文共 3100 字,大约阅读时间需要 10 分钟。
实现C语言中的 atoi 函数:处理不同输入情况
问题描述
C语言中的 atoi
函数用于将字符串转换为整数。但在实现这一功能时,需要考虑多种不同的输入情况。这些情况包括处理空白字符、符号、数字以及其他无效字符。
分析输入情况
在实现 atoi
函数之前,我们需要考虑以下几种输入情况:
null
,函数应返回0。+
或-
,可以出现在字符串的开头。INT_MAX
或 INT_MIN
。++2
、+--2
等,应认为是无效的输入。编写函数步骤
INT_MAX
或 INT_MIN
。代码实现
public class Atoi { public static int atoi(String str) { // Null或空字符串 if (str == null || str.isEmpty()) { return 0; } // 去空白符 String trimmedStr = str.trim(); if (trimmedStr.isEmpty()) { return 0; } int result = 0; boolean sign = true; // 正数,false为负数 int index = 0; // 遍历字符串 for (int i = 0; i < trimmedStr.length(); i++) { char c = trimmedStr.charAt(i); // 检查是否是符号 if (c == '+' || c == '-') { if (sign) { // 符号只能出现一次 sign = false; index = i + 1; } else { // 多个符号符号,返回零 return 0; } } else if (Character.isLetterOrDigit(c) || c == ' ') { // 有字母或数字或空白符 continue; } else { // 遇到其他字符,返回零 return 0; } // 处理数字 try { int number = Character.getNumericValue(c); result = result * 10 + number; // 检查是否溢出 if (result > Integer.MAX_VALUE && sign) { return Integer.MAX_VALUE; } if (result < Integer.MIN_VALUE && !sign) { return Integer.MIN_VALUE; } } catch (NumberFormatException e) { // 当字符不是数字时,抛出异常,但逻辑上这里不应该出现 return 0; } } return result; } // 测试代码 public static void main(String[] args) { System.out.println(atoi("123")); // 123 System.out.println(atoi("-123")); // -123 System.out.println(atoi("+456")); // 456 System.out.println(atoi(" 789")); // 789 System.out.println(atoi(" -012")); // 12,因为前导零没有意义 System.out.println(atoi("abc")); // 0 System.out.println(atoi("+")); // 0 System.out.println(atoi("++123")); // 0 System.out.println(ато("+2"));//2 System.out.println(arti("2")); //2 }}
代码解释
- 空字符串检查:在开头检查输入字符串是否为 null 或空的,返回0。
- 去空白符:使用
trim
方法去除字符串前后的空白符,处理为空的情况。 - 符号处理:遍历字符,如果遇到符号检查是否是第一个符号,如果是,则继续处理后续字符。多个符号则返回0。
- 数字符号处理:遇到有效的数字符号,逐步构建数值。使用
Character.getNumericValue
获取数字符号的数值。 - 溢出处理:在处理大数字时,检查是否超过了最大值或最小值,根据符号返回相应的值。
- 返回结果:如果遍历结束后所有字符都是有效的数字符号,则返回结果,否则返回0。
这个实现尽量覆盖了大部分可能的输入情况,包括了边界情况处理,并通过测试确认能够正确转换各种有效的整数字符串。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月09日 09时28分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java基础学习总结(67)——Java接口API中使用数组的缺陷
2023-01-28
Java基础学习总结(70)——开发Java项目常用的工具汇总
2023-01-28
Java基础学习总结(73)——Java最新面试题汇总
2023-01-28
Java基础学习总结(75)——Java反射机制及应用场景
2023-01-28
Java基础学习总结(76)——Java异常深入学习研究
2023-01-28
Java基础系列
2023-01-29
Kubernetes 自定义服务的启动顺序
2023-01-29
Kubernetes 资源调度详解
2023-01-29
Java基础:StringBuffer类概念、构造函数、常用方法
2023-01-29
Kubernetes 部署 kubeflow1.7.0
2023-01-29
Java基础:变量(声明、赋值、引用)、基本数据类型、作用域
2023-01-29
Java基础:如何编写并执行入门级别程序 Hello World
2023-01-29
kubernetes 部署SonarQube 7.1 关联LDAP
2023-01-29
Java基础:按位运算符
2023-01-29
Kubernetes 配置管理实战
2023-01-29
Java基础:数字类概念、常用方法、常量
2023-01-29
Kubernetes 针对资源紧缺处理方式的配置
2023-01-29
Java基础:数组创建、初始化、引用、分类
2023-01-29
Java基础:数组的长度、数组的复制
2023-01-29