自己用 C语言实现 atoi()函数

atoi() 函数:atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束符(‘\0’)才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。
C语言 stdlib 库里面的atoi函数,只能把字符串转换为十进制的数,但是我们自己实现的时候,可以让他的功能更加强大,让它也可以转为 十六进制和八进制。

#include
#include
#include
#include
using namespace std;

/*
    面试题:字符串转整数

    1、考虑负数如何处理 
    2、如果遇到非数字 结束 或者为 0
*/

int d_atoi(const char* str)
{
    int num = 0;
    int i = 0;
    int n = strlen(str);
    while(istr[i]))
    {
        num = num*10 + str[i] - '0';    
        ++i;
    }
    return num;
}
int o_atoi(const char* str)
{
    int num = 0;
    int i = 0;
    int n = strlen(str);
    while(istr[i]) && str[i]< '8')
    {
        num = num*8 + str[i] - '0';
        ++i;
    }
    return num;
}

int x_atoi(const char* str)
{
    int num = 0;
    int i = 0;
    int n = strlen(str);
    while(istr[i]))
    {
        if(isdigit(str[i])) num = num*16 + str[i]- '0';
        else 
        {
            char ch = toupper(str[i]);//小写转大写
            num = num*16 + ch - 'A' + 10;
        }
        ++i;
    }
    return num;
}

int my_atoi(const char* str)
{
    int sum = 0;
    int tag = 0;
    /*
        1、处理空串
        2、处理正负号
        3、处理进制
        4、解决正负号
    */
    if(str == NULL) return sum;
    while(isspace(*str)) ++str;

    if(*str == '-')
    {
        tag = 1;
        ++str;
    }else if(*str == '+')
    {
        ++str;
    }

    if(*str == '0' && (*(str+1) == 'x' || *(str+1) == 'X'))
    {
        sum = x_atoi(str+2);
    }else if(*str == '0')
    {
        sum = o_atoi(str+1);
    }else
    {
        sum = d_atoi(str);
    }

    if(tag == 1)
    {
        sum = -sum;
    }
    return  sum;
}

int main()
{
    char buf[100];
    while(cin>>buf,buf[0] != '#')
    {
        int sum = my_atoi(buf);
        cout<<"num:"<<sum<return 0;
}

你可能感兴趣的:(C语言)