atoi与itoa的实现

先说下itoa,将数字转换成字符串。利用了在一个数后面加‘0’即可将之转换成char型,这样将每个数字转换成char后即成为一个逆序的字符数组,再逆序下即可。

atoi即将char-'0'即得整数。

代码中需要注意的地方:

1.函数名:可以设想有atoi有返回值来标识是否成功转换

//参数要为const

bool atoi(const char* pStr,int &nValue)

2.atoi中对于无法转换成数字的字符的判断,方式如下:

if(pStr[i] >= '0' && pStr[i] <= '9')

{

    //转换

}

else

{

    return false;

}

3.atoi中溢出的判断:

if(nValue > std::numeric_limits<int>::max())

{

      return false;

}

4.可以考虑将转化的数字类型设大点,如long long

 

自己实现:

void itoaMyself(int number,char str[])

{

    bool bNagetive = false;

    if(number<0)

    {

        bNagetive = true;

        number = 0-number;

    }



    int i=0;

    char tmp[12];

    //将数字转换成char

    while(number)

    {

        tmp[i] = number%10 + '0';

        i++;

        number=number/10;

    }

    if(bNagetive)

    {

        tmp[i++] = '-';

    }

    tmp[i] = '\0';



    i--;

    

    //cout<<"tmp[]为:"<<tmp<<endl;



    int j=0;

    //逆置的char转换成正序的字符串

    while (i>=0); 

    {

        str[j++]=tmp[i--];

    } 



    str[j] = '\0';

}
bool atoiMyself(char* str,int &number)

{

    int i=0,j=0;

    bool bNagetive = false;

    if(!str) return false;



    char tmp[12];

    //空格或制表符

    while(str[i]==' ' || str[i]=='/t')

    {

        i++;

    }



    if(str[i]=='-')

    {

        bNagetive=true;

        i++;

    }



    //cout<<"str[]:"<<str<<endl;



    int sum=0;

    while(str[i])

    {

        //if(IsNumber(str[i]-'0')) return false;

        sum    = str[i]-'0'+sum*10;

        i++;

    }

    if(bNagetive) sum=-sum;

    number=sum;

    return true;

}

附:
把字符串转换成整数实现[何海涛]
 
  

你可能感兴趣的:(it)