首页IT科技把字符串转换为整数(每日算法之把字符串转换成整数(atoi))

把字符串转换为整数(每日算法之把字符串转换成整数(atoi))

时间2025-04-28 04:52:17分类IT科技浏览3390
导读:JZ67 把字符串转换成整数(atoi 题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符(...

JZ67 把字符串转换成整数(atoi)

题目

写一个函数 StrToInt          ,实现把字符串转换成整数这个功能          。不能使用 atoi 或者其他类似的库函数                。传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符(+-) 3. 数字                ,字母     ,符号     ,空格组成的字符串表达式 4. 若干空格 转换算法如下: 1.去掉无用的前导空格 2.第一个非空字符为+或者-号时                ,作为该整数的正负号           ,如果没有符号     ,默认为正数 3.判断整数的有效部分: 3.1 确定符号位之后               ,与之后面尽可能多的连续数字组合起来成为有效整数数字           ,如果没有有效的整数部分,那么直接返回0 3.2 将字符串前面的整数部分取出               ,后面可能会存在存在多余的字符(字母                ,符号,空格等)          ,这些字符可以被忽略                ,它们对于函数不应该造成影响 3.3 整数超过 32 位有符号整数范围 [−231, 231 − 1]      ,需要截断这个整数          ,使其保持在这个范围内     。具体来说                ,小于 −231的整数应该被调整为 −231      ,大于 231 − 1 的整数应该被调整为 231 − 1 4.去掉无用的后导空格

方法 位运算

思路

算法实现

既然是将字符串转化为数字     ,那我们可以遍历字符串                ,一个字符串           ,一个字符地检查     ,然后取出掉无用的               ,取出数字           ,利用如下代码,一个数字一个数字地转换               ,前面的扩大十倍加上后面一位     。 res = res * 10 + sign * (c - 0); 具体做法: step 1:遍历字符串                ,用index记录全程的下标                。 step 2:首先要排除空串,然后越过前导空格          ,以及前导空格后什么都没有就返回0. step 3:然后检查符号                ,没有符号默认为正数           。 step 4:再在后续遍历的时候     ,将数字字符转换成字符          ,遇到非数字则结束转换     。 step 5:与Int型最大最小值比较                ,检查越界情况               。

代码

package mid.JZ67把字符串转换成整数; import java.util.*; public class Solution { /** * 代码中的类名          、方法名                、参数名已经指定     ,请勿修改     ,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ public int StrToInt (String s) { // write code here if (s.isEmpty()) return 0; int res = 0; int index = 0; while(index < s.length()) { if (s.charAt(index) == ) index++; else break;; } //去掉空格就没了 if (index == s.length()) return 0; int sign = 1; //处理第一个符号是正负号的情况 if (s.charAt(index) == +) index++; else if (s.charAt(index) == -){ sign = -1; index++; } //去掉符号就什么都没有了 if(index == s.length()) return 0; while(index < s.length()) { char c = s.charAt(index); if (c < 0 || c > 9) { break; } //处理越界 if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (c - 0) > Integer.MAX_VALUE % 10)) return Integer.MAX_VALUE; if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (c - 0) > -(Integer.MIN_VALUE % 10))) return Integer.MIN_VALUE; res = res * 10 + sign * (c - 0); index++; } return res; } }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
2021年能赚钱的游戏(什么游戏赚钱轻松-2023年了,啥游戏呀,宝箱一分钟3个,这么离谱的爆率没人管管吗) 2020微信赚钱的平台排行榜前十名(有什么好平台可以赚钱-微信赚钱平台有哪些?正规微信赚钱平台分享)