| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2639 人关注过本帖, 1 人收藏
标题:关于itoa()函数的实现,想和大家轻松的聊聊,我只是在15楼把自己知道的一个比 ...
只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:4 
呵呵 这个写的真好。。。。
学习了。

谢谢分享

用心做一件事情就这么简单
2012-01-19 01:20
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 11楼 小鱼儿c
谢谢夸奖,晚上回来贴一个很新的itoa()实现哦

The quieter you become, the more you can hear
2012-01-19 09:31
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 10楼 sd6862959
恩,我还没看那本书,你是说itoa()

还是base64?

The quieter you become, the more you can hear
2012-01-19 09:37
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 9楼 俺是小c
是啊,一起学习

The quieter you become, the more you can hear
2012-01-19 09:39
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
想把自己知道的itoa()函数最后一个版本也贴出来,当然会附上自己的理解

如果看过前面代码的仁兄我只想说一下对

*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];

这句话的理解
程序代码:
char* itoa(int value, char* result, int base) {
        
        if (base < 2 || base > 36) { *result = '\0'; return result; }
    
        char* ptr = result, *ptr1 = result, tmp_char;
        
                int tmp_value;
    
        do {

            tmp_value = value;

            value /= base;

            *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];

        } while ( value );
    
        // Apply negative sign

        if (tmp_value < 0) *ptr++ = '-';

        *ptr-- = '\0';

        while(ptr1 < ptr) {

            tmp_char = *ptr;

            *ptr--= *ptr1;

            *ptr1++ = tmp_char;
        }
        return result;
    }

作者将字符串弄成了“z-a9-0-9a-z" 这么一长串是为了处理负数的

下标35是指向 0

方括号中的下标 temp_value - value*base

比如 -9 除以 8 等于 -1 余 -1

仔细一看其实就是求余数(%),难道计算机运行 “减法+乘法” 的速度都比 取余数快???

还有一个感受就是自己对do while 循环有一种本能的抗拒,感觉有种“先斩后奏“的感觉,

让自己写的话估计是困难,只是多看别人的代码收获很大

The quieter you become, the more you can hear
2012-01-19 19:49
快速回复:关于itoa()函数的实现,想和大家轻松的聊聊,我只是在15楼把自己知道的 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027843 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved