题目来源于力扣–https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnoilh/
要求看上述链接的要求
符号代表+,-
遍历字符串,字符串一开始只能是空格,符号,或者是数字,如果不是上述的字符,直接退出循环,返回0。如果有空格,符号还要判断是不是在数字前边,不是的话就退出循环。还要判断符号出现的次数,出现两次及以上直接返回0。还要判断是否越界问题。
main函数代码
可以修改
#include<stdio.h>
#include<limits.h>
int myAtoi(char * s);
int main(){
char s[] = " + 43";
int number = myAtoi(s);
printf("%d",number);
return 0;
}
字符串到整数的实现
int myAtoi(char * s){
// 数字是否第一次出现
int countNum = 0;
// 字符串位置
int i = 0;
// 符号位
int sign=1;
int sum = 0;
// 计算+ - 出现的次数
int countSymbol = 0;
// 字符串不为空
while(s[i]){
// 如果不是数字
if(!(s[i]>='0'&&s[i]<='9')){
// 如果数字没出现并且字符是' ' ,'-','+'并且符号只出现过一次
if(countNum==0&&(s[i]==' '||s[i]=='-'||s[i]=='+')&&countSymbol==0){
// 符号为-
if(s[i]=='-'){
// 取相反数
sign = -sign;
// 符号位++
countSymbol++;
}
if(s[i]=='+'){
// 符号位++
countSymbol++;
}
// 跳出此次循环
i++;
continue;
}else{
// 其余字符 跳出循环结束
i++;
break;
}
}
// 判断是否越界
if(sum>INT_MAX/10||(sum==INT_MAX/10&&s[i]-'0'>INT_MAX%10)){
return sign==1?INT_MAX:INT_MIN;
}else{
// 计算数值
sum = sum*10+(s[i]-'0');
countNum++;
i++;
}
// 出现了多个 +,-,直接返回0
if(countSymbol>1){
return 0;
}
}
// 返回有符号的整数
return sign*sum;
}