Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74488
  • 博文数量: 29
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 337
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-24 20:02
文章分类

全部博文(29)

文章存档

2011年(1)

2009年(1)

2008年(27)

我的朋友

分类:

2008-12-07 19:00:43

// 修改itoa函数(只有两个参数的版本),使得该函数可以接受三个参数。其中第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。
bool itoa(int n, char s[], const size_t digit)
{   
    static int revers(char *s);
    enum {minus, best_minus}flag;
    size_t i;
    
    if (0 == n)
        return false;
    if (n < 0)
        n = (0 == (n<<1))? (flag = best_minus, INT_MAX) : (flag = minus, -n); // 对负数的特殊处理
    
    for (i = 0; n; ++i) {   
        s[i] = n % 10 + '0';
        n /= 10;
    }
    if (minus == flag || best_minus == flag) //为负数添加符号
        s[i++] = '-';
    s[0] += flag; // 对最大负数的特殊处理
    while (i < digit) //如果长度不足最小宽度,则在左端用空格填补
        s[i++] = ' ';
    s[i] = '\0';
    revers(s);
    return true;
}
static int revers(char *s)
{
    char *f_ptr = s;
    char *r_ptr = s + (strlen(s) - 1);
   
    while (f_ptr < r_ptr) {
        *f_ptr ^= *r_ptr;
        *r_ptr ^= *f_ptr;
        *f_ptr ^= *r_ptr;
        ++f_ptr, --r_ptr;    
    }
    return 1;
}

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

上一篇:入门必做的题(来自PF)

下一篇:PF-6

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