leetcode-String to Integer (atoi)-8

这题目首先你要理解atoi函数的功能,然后去自己实现。

输入一个字符串,第一个非空字符是+、- 或者数字,否则直接输出0;符号后面必须必须是连续的数字(也就是数字前面最多紧接一个符号,否则输出0),遇到非数字就停止。

除了字符的格式还有就是注意整数的范围,INT_MAX,INT_MIN。我判断的地方不是很到位,所以后来直接在前面判断读入的数字的个数,如果超过10个,直接返回最大整数或最小整数。

“++123”输出0

“+  123”输出0

“    123”输出123

“+-123-1”输出0

“b123”输出0

class Solution {
public:
    int myAtoi(string str) {
	int len=str.length();
	int i=0;
	int ans=0;
	int ad=0,su=0;
	int ok=1;
	int ok2=0;
	while(i<len){
	    if(!ok) break;
		if(str[i]=='+'){
			ad++;
			if(ad>1) return 0;
			ok2=1;
		}
		else if(str[i]=='-'){
			su++;
			if(su>1) return 0;
			ok2=1;
		}
		else if(str[i]>='0'&&str[i]<='9'){
			if(ad>0&&ad==su) return 0;
			ok=1;
			int cnt=0;
			int tmp[100];
			while(i<len){
				tmp[cnt++]=str[i++]-'0';
				if(i>=len||!(str[i]<='9'&&str[i]>='0')) break;
			}
		//	for(int j=0;j<cnt;j++) cout<<tmp[j]<<" ";cout<<endl;
		    if(cnt>10){
		        if(ad>=su) return INT_MAX;
		        else return INT_MIN;
		    }
			for(int j=0;j<cnt;j++){
				ans=ans*10+tmp[j];
				if(ans<0&&ad>=su) return INT_MAX;
				if(ans<0&&ad<su) return INT_MIN;
				// if(ans>=INT_MAX){
				//     ans=ad<su?(ans*(-1)):INT_MAX;
				//     if(ad<su&&ans<INT_MIN) ans=INT_MIN;
				//     return ans;
				// }
			}
			if(ad<su) ans*=-1;
			break;
		}
		else if(str[i]!=' '&&!ok2) ok=0;
		else if(ok2) ok=0;
		i++;
	}  
	return ans;
}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值