这类问题通常用递归就可以简单解决了,示例代码如下:
(一)递归形式
#include <stdio.h>
char* convert( char*, int );
int main(void)
{
char a[30] = {0};
convert(a, 12345);
printf("%s", a);
return 0;
}
char* convert( char *p, int x )
{
if( x >= 10 ) p = convert( p, x / 10 );
*p = '0' + x - x /10 * 10;
return p + 1;
}
(二)非递归形式
#include <stdio.h>
#include <string.h>
int main()
{
char s[10];
int n,i=0;
scanf("%d",&n);
convert(s, n);
strrev(s);
puts(s);
return 0;
}
char* convert( char *s, int n )
{
while(n!=0)
{
s[i++]=n%10+'0';
n/=10;
}
s[i]='/0';
strrev(s);//字符串反转
return s;
}
下面是在项目中用的一个,嵌入式的固件开发,因为不能用库函数,所有的要用到的库函数都是自己写
#define DigitToByte(n) (char)(0x30|(n))
/*****************************************************************************#
* Function Name : IntToString
* Describe : convert int to string
* Return Value : void
* Param:
* @ int nNum [in] : the number to convert
* @ char* pStr [out]: the string output cache
******************************************************************************/
void IntToString(int nNum, char* pStr)
{
int sign, n, i;
assert(pStr);
n = 0;
if ((sign = nNum) < 0)
{
nNum = -nNum;
}
do
{
pStr[n++] = DigitToByte(nNum % 10);
nNum /= 10;
}
while ( nNum );
if (sign < 0)
{
pStr[n++] = '-';
}
pStr[n] = '/0';
i = --n >> 1;
++i;
while ( i-- > 0 )
{
ivUInt8 t = pStr[i];
pStr[i] = pStr[n - i];
pStr[n - i] = t;
}
}