2024-03-19 02:45:09 +08:00

108 lines
2.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
/**
* https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/5/strings/37/
* 字符串转整数atoi
*/
#define INT_MIN -2147483648
#define INT_MAX 0x7fffffff
int myAtoi(char *str)
{
long long ret = 0;
char flag = 1, len = 0;
while (*str == ' ') //删除空
{
str++;
}
if (*str == '-')
{
flag = -1;
str++;
}
else if (*str == '+')
{
str++;
}
else if (*str < '0' || *str > '9')
{
return 0;
}
while (*str >= '0' && *str <= '9' && len < 11)
{
ret = ret * 10 + (*str - '0');
str++;
if (ret != 0)
{
len++;
}
}
ret *= flag;
if (ret < INT_MIN)
{
return INT_MIN;
}
if (ret > INT_MAX)
{
return INT_MAX;
}
return ret;
}
/*
int myAtoi(char* str) {
if(strlen(str)==0)
return 0;
char* xianzai= str;
long long fanhui = 0;
int flag = 1;//记录符号位正负
long long max = pow(2,31)-1;
long long min = pow(2,31);//溢出的上下界不相同
while (*xianzai == ' ')
{
xianzai++;//跳过空格位置
}
if (*xianzai == '-')
{
flag = -1;
xianzai++;
}
else if(*xianzai == '+')
{
xianzai++;
}
else if (*xianzai < '0' || *xianzai > '9')
{
return 0;
}
while (*xianzai >= '0' && *xianzai <= '9')
{
fanhui= fanhui*10;
fanhui=fanhui+*xianzai-'0';//利用符号本身的ascii码直接转换成数字
if(flag==1 && fanhui>max)
{
//正数溢出返回INT_MAX
return max;
}
else if(flag==-1&&fanhui>min)
{
return min;//注意int类型上下界数值上相差1
}
xianzai++;
}
return flag*fanhui;
}
*/
int main()
{
printf("%d\n", myAtoi("-1"));
printf("%d\n", myAtoi("456"));
printf("%d\n", myAtoi(" -42"));
printf("%d\n", myAtoi("a65r"));
printf("%d\n", myAtoi("9223372036854775808"));
printf("%d\n", myAtoi("-91283472332"));
printf("%d\n", myAtoi("4193 with words"));
printf("%ld,%ld\n", -pow(2, 31), pow(2, 31) - 1);
getchar();
return 0;
}