找工作之“整数转化为字符串---itoa实现“

来源:互联网 发布:安装ubuntu如何分区 编辑:程序博客网 时间:2024/06/05 03:36

整数转化为字符串,就是itoa函数(http://www.cplusplus.com/reference/cstdlib/itoa/),例如输入123,得到字符串“123”。还算简单,自己实现一下还是比较有意思的。

/***************最初的版本****************/void convIntToStr(int n){int signFlag = 0;char str[10];int bitsNum = 0;int i = 0;if(n < 0){signFlag = 1; n = -n;}for( ; ;){unsigned int quotient = 0;unsigned int remainder = 0;quotient = n / 10;remainder = n % 10;str[bitsNum++] = remainder + '0';n = quotient;if(quotient == 0)break;}if(1 == signFlag)printf("-");for(i = bitsNum -1; i >= 0; --i )printf("%c",str[i]);//putchar(str[i]);}//"递归实现" 方案void convIntToStr2(int n){if(n < 0){putchar('-');n = -n;}if( n / 10)convIntToStr2(n / 10);putchar(n % 10 + '0');}//字符串倒序函数void reverse(char s[]){int i = 0, j = 0;char c = '0';for(i = 0, j = strlen(s) - 1; i < j; ++i, --j){c = s[i]; s[i] = s[j]; s[j] = c;}}//参考“c语言程序设计一书”优化的版本。void convIntToStr3(int n){int sign = 0, i = 0;char str[10];char * p = str;if((sign = n) < 0)n = -n;do{str[i++] = n % 10 + '0';}while((n /= 10) > 0);if(sign < 0)str[i++] = '-';str[i] = '\0';reverse(str);while(*p)putchar(*p++);}/*** 网上找的“很牛逼的解决方案”----大牛写的实现就是不一样啊。。。*/char * itoa(int value, char * result, int base) {// check that the base if validif (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 signif (tmp_value < 0) *ptr++ = '-';*ptr-- = '\0';while(ptr1 < ptr) {tmp_char = *ptr;*ptr--   = *ptr1;*ptr1++  = tmp_char;}return result;}

测试无误。