itoa的实现
来源:互联网 发布:淘宝点击软件 编辑:程序博客网 时间:2024/06/05 20:00
itoa是windows的标准函数,但在linux系统中并未作为标准实现。这些天写了一个linux版本的测试例子,其中需要用到itoa函数,所以自己实现了一下。目前该函数只有
base为10的版本,其实现思路大致为:
1)首先判断待转换整数的符号,并且对负数最大值做记录(如果为INT_MIN,则positive_add被赋值为1)。
2)循环将待转换整数模10,直至待转换整数等于0。这里采用了do while循环,是为了保证当待转换整数为0时,依然可以执行一次循环。3)第二步得到的数是反序的,所以此时需要将结果倒转回来,被拷贝到输出buf中。
下面是代码:
static void MyItoA10(int val, char* buf, int buf_len){ static char buf_convert[11] = {0}; char* buf_convert_ptr = buf_convert; bool positive_val = false; int positive_add = 0; if (val < 0) { positive_val = true; if (val == INT_MIN) { val = INT_MAX; positive_add = 1; } else { val = -val; } } do { if (buf_convert_ptr == buf_convert && positive_add) { *buf_convert_ptr++ = (val % 10) + '1'; } else { *buf_convert_ptr++ = (val % 10) + '0'; } val /= 10; } while (val); if (positive_val) { *buf_convert_ptr++ = '-'; } // Revise content into buf. char* buf_ptr_revise = buf_convert_ptr - 1; char* buf_dest = buf; while (buf_ptr_revise >= buf_convert && buf_dest - buf < buf_len - 1) { *buf_dest++ = *buf_ptr_revise--; } // Add tailing char. *buf_dest = '\0';}
接下来是测试函数。
int main(){ static const int knTestArray[] = { 0, 1, 9, 10, 99, 100, 999, 1000, 9999, 10000, 99999, 100000, 999999, 1000000, 9999999, 10000000, 99999999, 100000000, INT_MAX, -1, -9, -10, -99, -100, -999, -1000, -9999, -10000, -99999, -100000, -999999, -1000000, -9999999, -10000000, -99999999, -100000000, INT_MIN, }; static const char* knResultArray[] = { "0", "1", "9", "10", "99", "100", "999", "1000", "9999", "10000", "99999", "100000", "999999", "1000000", "9999999", "10000000", "99999999", "100000000", "2147483647", "-1", "-9", "-10", "-99", "-100", "-999", "-1000", "-9999", "-10000", "-99999", "-100000", "-999999", "-1000000", "-9999999", "-10000000", "-99999999", "-100000000", "-2147483648", }; for (int i = 0; i < sizeof(knTestArray) / sizeof(knTestArray[0]); ++i) { char* dest = new char[strlen(knResultArray[i]) + 1]; MyItoA10(knTestArray[i], dest, strlen(knResultArray[i]) + 1); assert(strcmp(dest, knResultArray[i]) == 0); delete dest; } // for. std::cin.get();}
- atoi() itoa() 的实现
- itoa的自我实现
- 我的itoa实现
- itoa的源码实现
- itoa的实现
- itoa的内部实现
- itoa函数的实现
- itoa的实现
- itoa 库函数的实现
- 一个itoa的实现
- itoa的实现
- itoa()的实现
- itoa()函数的实现
- itoa函数的实现
- itoa的实现
- itoa函数的实现
- itoa函数的实现
- itoa函数的实现
- 肢体语言“十诫”
- bios报警声音大全 破除网页鼠标右键禁用的十大绝招 windows任务管理 xp优化
- Android 彻底关闭应用程序,返回键的捕获及AlertDialog
- 中秋快乐
- 记一个梦
- itoa的实现
- EL表达式
- sql语句的局部变量的应用
- tihui
- cmd信使发信 组策略高阶修改
- 我思故我在
- 2G显存 用之有道:从玩家需求的转变看显存的发展
- 特色搜索引擎
- 程序员版《爱情买卖》