实现的功能
1.atoi,将字符串转化为整型 (十进制,八进制,十六进制)
2.如果输入的数字超过整型范围,输出整型最大值,负数输出整型最小值
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int str_to_10(char* str,int tag)
{
long long a = 0;
while (isdigit(*str))
{
a = a * 10 + (*str - '0');
if (tag && a > 2147483648)
{
a = 2147483648;
break;
}
else if (a > 2147483647)
{
a = 2147483647;
break;
}
*str++;
}
return a;
}
int str_to_8(char* str,int tag)
{
long long a = 0;
while (isdigit(*str) && *str != '8' && *str != '9')
{
a = a * 8 + (*str - '0');
if (tag && a > 2147483648)
{
a = 2147483648;
break;
}
else if (a > 2147483647)
{
a = 2147483647;
break;
}
*str++;
}
return a;
}
int str_to_16(char* str,int tag)
{
long long a = 0;
while (*str != '\0')
{
if (isdigit(*str))
{
a = a * 16 + (*str - '0');
}
else
{
char ch = tolower(*str);
a = a * 16 + (ch - 'a') + 10;
}
if (tag && a > 2147483648)
{
a = 2147483648;
break;
}
else if (a > 2147483647)
{
a = 2147483647;
break;
}
*str++;
}
return a;
}
int my_atoi(char* str)
{
long long a = 0;
int tag = 0;
if (isspace(*str))
{
++str;
}
if ('-' == *str)
{
tag = 1;
++str;
}
else if ('+' == *str)
{
tag = 0;
++str;
}
if (*str == '0')
{
if ( *(str+1) == 'x' || *(str+1) == 'X')
{
a = str_to_16(str + 2,tag);
}
else
{
a = str_to_8(str + 1,tag);
}
}
else
{
a = str_to_10(str,tag);
}
if (tag)
{
a = -a;
}
return a;
}
int main()
{
char ch[100];
while (cin >> ch)
{
cout << my_atoi(ch) << "";
}
cout << endl;
getchar();
return 0;
}