题目大意:给你一个字符串,需要把这个字符串转化成int值。链接在此

思路:直接模拟即可,不过有很多坑,需要非常的仔细。首先要考虑正负号问题,一般来说大家习惯的处理负号,但是会忘掉正好,这个到也好改;然后接下来的问题是,可能字符串的一开始是一堆空格,需要跳过;接下来如果开始的字符不是数字的话,那么int值就置为0,然后直接退出,这个和接下来的同理;处理数字的过程中,如果遇到了非数字字符,那么就直接退出,因为int值已经确定了;然后接下来就是取值范围问题了,题目的要求是超过int的设置为INT_MAX小于INT_MIN的设置为INT_MIN,这样的话,我们可以用unsigned int来算中间结果,然后最后再把unsinged int转化为int,不过中间可能就超过了INT_MAX,比如字符串“1234567891234”,这个字符串转成int之后的值已经超过了INT_MAX,这就需要在处理的过程中进行判断了,我的判断方式是如果上一次的结果>(INT_MAX/10)的话,那么将上一次的结果×10然后加上当前这个字符所代表的数,然后当作结果。当处理完之后,就只要把结果往int的范围内压缩就行了,然后再进行正负判断即可。思路挺简单的,不过坑不少。

代码在这里.cpp)

Comments