题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
解法:
1.判断字符串指针是否为NULL,字符串是否为空“\0”
2.判断第一个正、负号
3.进行循环判断,核心转换就是字符-‘0’就是数字了,然后*10,不断累加即可
4.还要判断是否溢出,int为4个字节,所以正数上限为0x7FFFFFFF,负数的底线为0x8FFFFFFF
class Solution {
public:
int StrToInt(string str) {
long long num = 0;
const char * cstr = str.c_str();
if(cstr != NULL & *cstr != '\0') {
bool minus = false;
if(*cstr == '+')
cstr++;
else if(*cstr == '-') {
cstr++;
minus = true;
}
if(*cstr != '\0') {
num = StrToIntCore(cstr, minus);
}
}
return (int)num;
}
long long StrToIntCore(const char * diggt, bool min) {
long long num = 0;
while(*diggt != '\0') {
int flag = min ? -1:1;
if(*diggt < '9' && *diggt > '0') {
num = num * 10 + flag * (*diggt - '0');
if((!min && num > 0x7FFFFFFF) || (min && num < (signed int)0x80000000)) {
num = 0;
break;
}
diggt++;
}
else {
num = 0;
break;
}
}
return num;
}
};