当前位置:网站首页 > Haskell函数式编程 > 正文

转换字符串编码(编码实现字符串转整型的函数)



题目链接:. - 力扣(LeetCode)

将其翻译一下: 

①:如果首个字符是空格: 删除其然后让下一个字符进入②判断,反之不是空格则就该位置的字符进入②判断

②: 判断符号位: 三种情况,即 ''+'' , ''−'' , ''无符号" ,''无符号"和''+''都代表正号,只有-才代表负号,且''无符号"则就这个位置的字符继续进入③判断,反之是下一个字符进入③判断

③:如果是字符'0' ~ '9'的才算作有效的数字字符,反之则非数字字符;读到有效字符,才会继续往下读,而读到非数字字符则立即停止,且非数字字符不要了,仅要前面读到的连续的有效的数字字符

④:将读到的有效的数字字符转换为整数(即,"123" -> 123, "0032" -> 32);如果没有读入数字,则整数为  

⑤:转换成整数,该整数如果大于2^31 − 1 或者 小于-2^31 ,这两种情况都要进行截断,截断就是小于  的整数应该被固定为  ,大于2^31 − 1就应该固定为  

⑥:将最终的整数进行返回

代码:

 

解读:

①:

 

解释:

a:正如我们前文所说,我们用了一个bool值来进行反映正负号,假设true代表正号,下面我们判断符号如果是正号则不改变bool值,反之改变

b:接着就是进行思路中的①,这里不仅对于一个空格的跳过,更是对于("___42")这种连续空格的跳过

c:判断符号,无符号和+都不用改变bool值(因为设定的true为+),反之更改bool值为false

d:接着就是对非符号位的判断,正常数字第一个数字一定是1~9的,返回直接return 0;

②: 

解释:

a: res用来不断地将存储读取到的字符转换成的整形("12" -> 12,"123" -> 123),转换规则下文会说

b:num用来保存数字字符对应的整形的值 ('6'->6),即减去'0'即可 ('6'-'0'->6)

c:border 是最关键的,其值是(2^31-1)/10 ,即整形的最大值/10,整形最大值是,所以border等于,border取INT_MAX/10才能够进行⑤(是否超出范围的判断),要理解其border的值为什么是,需要理解a中res是如何不断地存储读取到的字符转换成的整形

字符转化成整形的思路:

解释:可知,规则是res = 10 * res + num;

明白了规则,就能理解为什么board是

解释:两种越界的情况

a:第一种就是res> border会越界,因为此时其*10 一定会超过整形的最大值,假设res仅仅比border大1,为,这时*10,都是,远远大于了

b:res=boder && num>7 ,前面的res = boder ,此时res*10,值为,距离超出范围差7,所以后面的num>7才会越界

c:以上是正数的越界,那负数呢?负数的范围是-,绝对值来说的话比正数还要大于1,那为什么仅仅只判断正数就行了呢?以下分享一个力扣同学的观点:

d:最后需要注意的一点是:我们的判断越界一定要放在读取字符的后面,因为来到越界判断,就证明一定是读取到了有效数字字符,此时在越界的后面一定是要 res = res*10 +num的,所以我们的两种越界情况才能够判断,毕竟我们两种越界判断都是*10 或者 *10+num 的条件上进行的。

到此这篇转换字符串编码(编码实现字符串转整型的函数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 多级列表的编号样式(多级列表的编号样式不能修改A对B错)2024-12-22 18:45:08
  • 电路物理知识点总结(物理电路知识点公式)2024-12-22 18:45:08
  • py格式用什么软件打开(pyc文件用什么软件打开)2024-12-22 18:45:08
  • pivot函数oracle用法(oracle value函数)2024-12-22 18:45:08
  • sigmoid 函数(sigmoid函数)2024-12-22 18:45:08
  • sigmoid激活函数求导(sine激活函数)2024-12-22 18:45:08
  • ip地址计算公式(ip地址计算公式怎么算)2024-12-22 18:45:08
  • prjab公式(prd算法公式)2024-12-22 18:45:08
  • mysql窗口函数用法(mysql8.0 窗口函数)2024-12-22 18:45:08
  • sigmoid函数求导表达式(sigmoid函数导数)2024-12-22 18:45:08
  • 全屏图片