灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4610回复:0

itoa以及atoi C实现

楼主#
更多 发布于:2012-09-06 12:32

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<'0'||str>'9')
      {
        ret=0;
        break;
      }
      ret=ret*10+(str-'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=X[n%radix];
      else
      str=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<'0'||str>'9')
      {
        ret=0;
        break;
      }
      ret=ret*10+(str-'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=X[n%radix];
      else
      str=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 评分0
游客

返回顶部