第一次尝试
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。LeetCode链接
- 方法:设置符号位 ch,数值位 num,标记位 flag = 0,然后遍历字符串,一开始时遇到空格跳过,遇到非数字、非符号的字符直接返回,之后遇到符号则 flag++,遇到数字则进行运算,且 flag++,遇到非数字的则直接跳出循环;
最后对结果进行判断,如果是正数,且 num >= 0x7fffffff,那么直接返回 0x7fffffff;如果是负数,且 num >= 0x80000000,那么直接返回 -0x80000000;除此之外,则正常返回;
int myAtoi(char* s){
//数值位
long long num = 0;
//符号位
char ch = '+';
//标记位
int flag = 0;
//循环遍历
while(*s && flag < 2 && num < 0x90000000){
//在没遇到数字,符号之前,遇到空格则向下遍历
//在遇到数字、符号之后,遇到空格则跳出循环
if(flag < 1 && *s == ' '){
s++;
}
//在遇到符号之后,flag++
else if(flag < 1 && (*s == '-' || *s == '+')){
ch = *s++;
flag++;
}
//在没遇到符号位之前,遇到数字则flag++,否则 flag 不变
else if(*s >= '0' && *s <= '9'){
num *= 10;
num += *s++ - '0';
flag == 1 ? flag : flag++;
}
//其他情况直接跳出循环
else{
break;
}
}
//判断结果的大小
//如果是正数,且 num >= 0x7fffffff,那么直接返回 0x7fffffff;
if(ch == '+' && num >= 0x7fffffff){
return 0x7fffffff;
}
//如果是负数,且 num >= 0x80000000,那么直接返回 -0x80000000;
if(ch == '-' && num >= 0x80000000){
return -0x80000000;
}
return ch == '-' ? -(int)num : (int)num;
}