设为首页 加入收藏

TOP

c函数itoa和atoi实现
2014-02-08 12:44:32 来源: 作者: 【 】 浏览:183
Tags:函数 itoa atoi 实现

  1、itoa函数实现

  #include <STDIO.H>

  void itoa(int i, char *string)

  {

  int power=0,j=0;

  j=i;

  for( power=1;j>10;j/=10)

  power*=10;

  for(;power>0;power/=10)

  {

  *string++='0'+i/power;

  i%=power;

  }

  *string='\0';

  printf("%s\n",string);

  }

  void main()

  {

  char string[20];

  itoa(12345, string);

  printf("%s\n",string);

  }

  其中power相当于类似于1234,其power=1000;134,其power=100

  *string++='0'+i/power;//获得取得字符的asicii码

  i/power取得字符,例如1234/1000=1;234/100=2

  2、atoi实现

  int atoi(char *str)

  {

  if(!str)

  return -1;

  bool bMinus=false;

  int result=0;

  if(('0'>*str || *str>'9')&&(*str=='+'||*str=='-'))

  {

  if(*str=='-')

  bMinus=true;

  *str++;

  }

  while( *str != '\0')

  {

  if('0'> *str || *str>'9')

  break;

  else

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

  }

  if (*str != '\0')//no-normal end

  return -2;

  return bMinus -result:result;

  }

  重写的atoi函数,没有考虑溢出的情况。

  if(('0'>*str || *str>'9')&&(*str=='+'||*str=='-'))//判读第一个字符是否为数字的正负号

  if (*str != '\0')//no-normal end,当上文的while循环不正常退出,应视为字符串不合法,例如"+1234abc"

  测试

  char *c1 = "12345";

  char *c2 = "-12345";

  char *c3 = "bat-123";

  char *c4 = "+123abc";

  printf("c1=%d\n",atoi(c1));

  printf("c2=%d\n",atoi(c2));

  printf("c3=%d\n",atoi(c3));

  printf("c4=%d\n",atoi(c4));

  输出结果为:

  c1=12345

  c2=-12345

  c3=-2

  c4=-2

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言字符串操作总结大全 下一篇const常量与define宏定义的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: