算法小记(三)

//C++ 去字符串两边的空格 实现trim
void trim(string &s){
    if (s.empty()) return;
    s.erase(0,s.find_first_not_of(" "));
    s.erase(s.find_last_not_of(" ") + 1);
}
inline string&  leftTrim(string &s){   
	string::iterator  p=find_if(s.begin(),s.end(),not1(ptr_fun<int, int>(isspace)));   
	s.erase(s.begin(),p);
	return s;
}

inline  string&  rightTrim(string &s){   
	string::reverse_iterator  p=find_if(s.rbegin(),s.rend(),not1(ptr_fun<int, int>(isspace)));   
	s.erase(p.base(),s.end());   
	return s;   
}

inline   string&   trim(string &s){   
	leftTrim(rightTrim(s));
	return s;
}

INT_MAX的值为2147483647
INT_MIN的值为-2147483648

实战演练

Leetcode - 8 字符串转换整数 (atoi)

class Solution {
public:
    int myAtoi(string s) {
        int len=s.size();
        int i=0;
        int num=0;
        int sign=1;//判断正负号
        //忽略前置空格
        while(i<len&&s[i]==' '){
            i++;
        }
        //处理正负号
        if(s[i]=='+'||s[i]=='-'){
            sign=(s[i++]=='-')?-1:1;
        }
        while(i<len&&isdigit(s[i])){
            if(num > INT_MAX/10 || (num == INT_MAX/10 && s[i]-'0' > 7)){//是否溢出
                return sign == 1 ? INT_MAX : INT_MIN;
            }
            // if(num < INT_MIN/10 || (num == INT_MIN/10 && s[i]-'0' < -8)){
            //     return sign == 1 ? INT_MAX : INT_MIN;
            // }
            num=num*10+(s[i++]-'0');//不加括号有溢出风险
        }
        return num*sign;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值