当前位置:编程学习 > C/C++ >>

itoa以及atoi C实现

itoa以及atoi两个函数实现应该是面试中的常见题,现在先预备写两个,以便需要的时候的快速反应

[cpp] //返回0表示出错  
int atoi(char* str) 

  int len=lstrlenA(str); 
  int ret=0; 
 
  int i=0; 
  if('-'==str[0]||'+'==str[0]) 
  { 
      i=1; 
  } 
  for(;i<len;++i) 
  { 
      if(str[i]<'0'||str[i]>'9') 
      { 
        ret=0; 
        break; 
      } 
      ret=ret*10+(str[i]-'0'); 
  } 
  if('-'==str[0]) 
  { 
      ret=~ret+1; 
  } 
  return ret; 

 
char* itoa(int n,char *str,int radix) 

    static char X[16]={'0','1', 
                       '2','3', 
                       '4','5', 
                       '6','7', 
                       '8','9', 
                       'A','B', 
                       'C','D', 
                       'E','F' 
                      }; 
    int i=0; 
    while(1) 
    { 
      if(radix==16) 
      str[i]=X[n%radix]; 
      else 
      str[i]=n%radix+'0'; 
 
      if((n/=radix)==0) 
      break; 
      ++i; 
    } 
    for(int j=0;j<(i+1)/2;++j) 
    { 
        char c=str[j]; 
        str[j]=str[i-j]; 
        str[i-j]=c; 
    } 
    return str; 

//返回0表示出错
int atoi(char* str)
{
  int len=lstrlenA(str);
  int ret=0;

  int i=0;
  if('-'==str[0]||'+'==str[0])
  {
      i=1;
  }
  for(;i<len;++i)
  {
      if(str[i]<'0'||str[i]>'9')
      {
        ret=0;
        break;
      }
      ret=ret*10+(str[i]-'0');
  }
  if('-'==str[0])
  {
      ret=~ret+1;
  }
  return ret;
}

char* itoa(int n,char *str,int radix)
{
    static char X[16]={'0','1',
                       '2','3',
                       '4','5',
                       '6','7',
                       '8','9',
                       'A','B',
                       'C','D',
                       'E','F'
                      };
    int i=0;
    while(1)
    {
      if(radix==16)
      str[i]=X[n%radix];
      else
      str[i]=n%radix+'0';

      if((n/=radix)==0)
      break;
      ++i;
    }
    for(int j=0;j<(i+1)/2;++j)
    {
        char c=str[j];
        str[j]=str[i-j];
        str[i-j]=c;
    }
    return str;
}

 


摘自 天道酬勤

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,