天天看點

自己寫的atoi函數和itoa函數

atoi函數的實作源碼:

#include <iostream>

using namespace std;

enum status{invalid=0,valid};

bool result_status=invalid;//最後最為輸入是否違法的辨別

int strToInt(const char* str)

{   long long num=0;

    bool minus=false;

 if(str!=NULL && *str!='\0')//如果不是空指針或者字元串内容不是空“”,那麼就執行後面的

 { 

    if('+'==*str)

    {

     str++;

    }

    else

    if('-'==*str)

    {

          minus=true;

    }

    while('\0'!=*str)

    {  

     if('0'<=*str&&'9'>=*str)

     {

                num=num*10+(*str)-'0';

    if((minus==false)&&(num>0x7FFFFFFF)||(minus==false)&&(num>0x8FFFFFFF))//超過整數的最大範圍終止

    {  

     num=0;

     break;

    }

    str++;

     }

     else//出現非法字元時也終止

     {

      num=0;

      break;

     }

    }

 }

 if('\0'==*str)//如果是因為遇到'\0'退出循環,那麼說明輸入正确

 {

  if(minus)

  {

   num=0-num;

  }

  result_status=valid;

 }

 return (int)num;

}

int main()

{

 char *str="123456";

 int num=strToInt(str);

 if(result_status==valid)

 {

  cout<<num<<endl;

 }

 else

 {

  cout<<"input invalid"<<endl;

 }

 system("pause");

}

itoa函數的實作源碼:

char *myitoa(int num,char *str,int radix) {

自己寫的atoi函數和itoa函數

  itoa流程圖

char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; unsigned unum; if(radix==10&&num<0) { unum=(unsigned)-num; str[i++]='-'; } else unum=(unsigned)num; do

自己寫的atoi函數和itoa函數

  C語言程式

{ str[i++]=index[unum%(unsigned)radix]; unum/=radix; }while(unum); str[i]='\0'; if(str[0]=='-') k=1; else k=0; char temp; for(j=k;j<=(i-k-1)/2;j++) { temp=str[j]; str[j] = str[i-1+k-j]; str[i-j-1]=temp; } return str; }

繼續閱讀