Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66791
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 154
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-12 22:56
个人简介

不卑不亢

文章分类

全部博文(17)

文章存档

2016年(1)

2015年(13)

2014年(3)

分类: C/C++

2015-03-21 14:27:49


点击(此处)折叠或打开

  1. /* 递归与非递归版本itoa函数 */

  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>

  5. #if 0
  6. /* itoa: convert n to characters in s; recursive version */
  7. void itoa(int n, char *s)
  8. {
  9.     static int i;

  10.     if (n / 10)
  11.         itoa(n / 10, s);
  12.     else {
  13.         i = 0;
  14.         if (n < 0)
  15.             s[i++] = '-';
  16.     }
  17.     s[i++] = abs(n) % 10 + '0';
  18.     s[i] = '\0';
  19. }
  20. #else
  21. void reverse(char *s)
  22. {
  23. #if 0
  24.     char *head = s,
  25.          *tail = s;

  26.     while ('\0' != *tail)
  27.         tail++;
  28.     --tail;
  29.     while (head < tail) {
  30.         *head ^= *tail;
  31.         *tail ^= *head;
  32.         *head++ ^= *tail--;
  33.     }
  34. #else
  35.     int c;
  36.     char *t = NULL;

  37.     for (t = s + (strlen(s) - 1); s < t; s++, t--) {
  38.         c = *s;
  39.         *s = *t;
  40.         *t = c;
  41.     }
  42. #endif
  43. }
  44. /* itoa: convert n to characters in s; pointer version */
  45. void itoa(int n, char *s)
  46. {
  47.     int sign;
  48.     char *t = s;        /* save pointer to s */

  49.     if ((sign = n) < 0)
  50.         n = -n;            /* make n positive */
  51.     do {
  52.         *s++ = n % 10 + '0';    /* get next digit */
  53.     } while ((n /= 10) > 0);    /* delete it */

  54.     if (sign < 0)
  55.         *s++ = '-';
  56.     *s = '\0';
  57.     reverse(t);
  58. }
  59. #endif

  60. int main()
  61. {
  62.     int x = -1234567890;
  63.     char buff[1024];

  64.     itoa(x, buff);
  65.     puts(buff);
  66.     
  67.     return 0;
  68. }

阅读(1827) | 评论(0) | 转发(0) |
0

上一篇:atoi的实现

下一篇:字符串反序

给主人留下些什么吧!~~