c函数itoa和atoi实现

2014-02-08 12:44:32 · 作者: · 浏览: 187

  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