題目描述
將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。
解法:
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;
}
};