整数转化为字符串,就是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 valid
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;
}
测试无误。