itoa的具体实现、测试和优化
2009-12-01 18:26
141 查看
今天看到有人在百度知道提问:要写一个itoa的函数(仿c语言的)。看了一下,以前做过,也就随手写了。我把代码发出来,献丑了。
写完,唉,突然想测试一下他的速度,下面是我的函数和c的itoa函数时间的对比截图:
哇,这么大的差距啊。不信。
开一下优化试一下,结果:
不错哦!但还是有很大的差距啊。
不行,作为程序员,是不能认输的。我上网找了一下。下面是两个比较好的代码。一个跟我的差不多。另一个却有一个很好的思想。来,测试一下他们的运行时间。
myitoa是我写的,下面两个是网上找的,最后一个是c库函数
哎,我自己写的函数跟他们比还是有差距啊。
但我不明白我的函数跟myxtoa的差不多,为什么他的运行时间就比我的要短一倍呢(在开优化的时候)? 不懂。
库函数的优化还真不是赖的。无论是否编译器是否开优化的情况下都能有一个很好的运行时间。看来以后能用库里的东西,就用库里的东西了。
继续思考怎么优化。(如果你有办法帮我的话,请给我留言哦!谢谢了!!!)
下面是另外两个itoa函数,在网上找的。我都附上了,希望对大家有帮助吧。
inline void myitoa(int value, char *str, int radio = 10) { char *p = str; char *ptemp; unsigned int temp = value; char tempc; unsigned int i; if( value < 0 ) { *p++ = '-'; temp = (unsigned)(-value); } ptemp = p; do { i = temp % radio; if(i < 10) *p++ = (char)(i + '0'); else *p++ = (char)(i - 10 + 'a'); temp = temp / radio; } while( temp > 0 ); *p-- = '/0'; while( p > ptemp ) { tempc = *p; *p-- = *ptemp; *ptemp++ = tempc; } }
写完,唉,突然想测试一下他的速度,下面是我的函数和c的itoa函数时间的对比截图:
哇,这么大的差距啊。不信。
开一下优化试一下,结果:
不错哦!但还是有很大的差距啊。
不行,作为程序员,是不能认输的。我上网找了一下。下面是两个比较好的代码。一个跟我的差不多。另一个却有一个很好的思想。来,测试一下他们的运行时间。
myitoa是我写的,下面两个是网上找的,最后一个是c库函数
哎,我自己写的函数跟他们比还是有差距啊。
但我不明白我的函数跟myxtoa的差不多,为什么他的运行时间就比我的要短一倍呢(在开优化的时候)? 不懂。
库函数的优化还真不是赖的。无论是否编译器是否开优化的情况下都能有一个很好的运行时间。看来以后能用库里的东西,就用库里的东西了。
继续思考怎么优化。(如果你有办法帮我的话,请给我留言哦!谢谢了!!!)
下面是另外两个itoa函数,在网上找的。我都附上了,希望对大家有帮助吧。
char *my1itoa( int value, char *str, int radix ) { static char szMap[] = { // 字符映射表 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; int nCount = -1, nIndex; char *pStr = str, nTemp; if ( radix >= 2 && radix <= 36 ) // 限制radix必须在2到36之间 { if ( value < 0 && radix == 10 ) // 如果是负数就在首位添加负号,并将字符串前移 { *pStr++ = '-'; value = -value; //转为正数, } unsigned int nValue = *(unsigned*)&value; do { // 循环转换每一个数字,直到结束 pStr[ ++nCount ] = szMap[ nValue % radix ]; nValue /= radix; } while( nValue > 0 ); // 转换结束后字符串是翻的 nIndex = ( nCount + 1 ) / 2; // 计算出一半的长度 while( nIndex-- > 0 ) { // 将字符串的字符序翻转 nTemp = pStr[ nIndex ]; pStr[ nIndex ] = pStr[ nCount - nIndex ]; pStr[ nCount - nIndex ] = nTemp; } } pStr[ nCount + 1 ] = '/0'; // 置结束符 return str; }
static void __cdecl myxtoa ( unsigned long val, char *buf, unsigned radix, int is_neg ) { char *p; /* pointer to traverse string */ char *firstdig; /* pointer to first digit */ char temp; /* temp char */ unsigned digval; /* value of digit */ p = buf; if (is_neg) { /* negative, so output '-' and negate */ *p++ = '-'; val = (unsigned long)(-(long)val); } firstdig = p; /* save pointer to first digit */ do{ digval = (unsigned) (val % radix); val /= radix; /* get next digit */ /* convert to ascii and store */ if (digval > 9) *p++ = (char)(digval - 10 + 'a'); /* a letter */ else *p++ = (char)(digval + '0'); /* a digit */ } while (val > 0); /* We now have the digit of the number in the buffer, but in reverse order. Thus we reverse them now. */ *p-- = '/0'; /* terminate string; p points to last digit */ do { temp = *p; *p = *firstdig; *firstdig = temp; /* swap *p and *firstdig */ --p; ++firstdig; /* advance to next two digits */ } while (firstdig < p); /* repeat until halfway */ }
相关文章推荐
- MVC实战之排球计分(七)——软件的具体实现与测试
- Java实现MD5加密以及解密类,附带测试类,具体见代码。
- KMP算法代码实现和优化(不太能理解具体的过程和该算法思想)
- [C++] 测试硬件popcnt(位1计数)指令与各种软件算法,利用模板实现静态多态优化性能
- 卷积操作的GPU粗粒度并行实现及测试(优化)
- A/B 测试的基本概念举例理解以及具体实现方法【传统A/B测试基于后端的 A/B 测试(Back-end AB test),现在基本上基于前端js在客户端进行分流,有更多优点,请看里面】
- MyFlag Step11:后台代码编写、客户端具体功能实现与界面优化
- 微软推出的年龄测试网站 How-Old.net 具体是怎样实现识别年龄的?
- myflag step 13:后台代码编写、客户端具体功能实现与界面优化
- python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,并不像某些人写的每次只执行一个测试类,具体看代码,附上整个project代码
- 字符串函数---itoa()函数具体解释及实现
- 用python做自动化测试--实现高性能测试工具(3)-- 优化系统架构
- MyFlag Step12:后台代码编写、客户端具体功能实现与界面优化
- 3G测试系统的Viterbi译码及DSP实现及优化
- 知乎:微软推出的年龄测试网站 How-Old.net 具体是怎样实现识别年龄的?
- A/B 测试的基本概念举例理解以及具体实现方法【传统A/B测试基于后端的 A/B 测试(Back-end AB test),现在基本上基于前端js在客户端进行分流,有更多优点,请看里面】
- 第七周(1) 后台代码编写、客户端具体功能实现与界面优化
- 集合框架_用户登录注册案例详细分析和分包的实现、用户基本描述类和用户操作接口的实现、用户操作类的具体实现、用户测试类的实现、加入猜数字小游戏
- 第六周(2) 后台代码编写、客户端具体功能实现与界面优化
- 第六周(1) 后台代码编写与客户端具体功能实现以及界面优化