leetcode 8.字符串转化整数

练习地址:力扣

atoi() 主要要求满足的有以下几点:

1.在字符串最前方的空格需要忽略掉

2.检查忽略掉空格之后遇到的第一个符号,如果是负号则是负数,什么符号都没有就认为是正数,接下来读入直到遇到一个非数字字符

3.返回数字

思路:首先用min 和 max 存放 int 所可以表示的最大值,由于结果可能超过 int 所能表示的最大数值,所以这三个参数全都使用long long int 定义.接下来按照题目要求设置字符串要求即可

c++实现:

class Solution {
public:
    int myAtoi(string s) {
    int flag = 0,flags=0,zeroflag=0; int num[210]; int k = -1, len = 0;// flag记录最终结果是正数还是负数,flags记录符号有没有修改过
	memset(num, -1, sizeof(num));
	long long int result = 0;
    long long int min = -pow(2, 31);
	long long int max =(-min- 1);
	for (int i = 0; i<s.length(); i++)
	{
		if (len == 0 && s[i] == '-'&&flags==0&&zeroflag==0) {flag=1;flags=1;} // 
		else if (s[i] == ' '&&len == 0&&flags==0&&zeroflag==0) continue;
		else if (s[i] == '0'&&len == 0) {zeroflag=1;continue;} 
		else if(s[i]=='+'&&len==0&&flags==0) {flag=0;flags=1;} 
        else if (s[i] >= 48 && s[i] <= 57) { num[++k] = s[i]-48; len++; }
        else break;
        if(len>10&&flag==1) return min;
        else if(len>10&&flag==0) return max;
        else continue;
	}
	if (len == 0) return 0;
	else
	{
		for (int i = 0; i<len; i++)
		{
			result = result * 10 + num[i];
		}
		if (flag == 1 && (-result)>= min)
			return (-result);
        else if(flag == 1 && (-result) <min) return min;
		else if (flag == 0 && result <= max)
			return result;
        else return max;
	}
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值