return0;
}
5.9使用递归和非递归的两种方法编写函数
char*itoa(intn,char*string);
将整数n转换为十进制表示的字符串。
(在非递归方法中,可使用reverse()函数。
)
解:
递归方法分析。
难度大,可用图解法:
每次调用除以10,以去除最后一位,以n=3657为例。
由此图可见,由string指向应填入的字符数组的相应位置。
由调用的最底层开始,回归时填入,每次回归,指针后移一位,由此得
char*itoal(intn,char*string){
if(n/10)string=itoal(n/10,string);
*string++=n%10+48;//字符,ASCII码
returnstring;
}
考虑,数字串结束符和负数,得完整的函数。
char*itoal(intn,char*string){
if(n<0){
*string++=’_’;
n=-n;
}
if(n/10)string=itoal(n/10,string);
*string++=n%10+48;
*string=’\0’;
returnstring;
}
源代码:
#include
usingnamespacestd;
char*reverse(char*s){
chartemp,*temp1=s,*temp2=s;
while(*temp2)temp2++;
temp2--;//指针移回串尾
while(temp2-temp1>0){//注意此处,从串两头的指针同时向中间移动,重合或交错时停止
temp=*temp1;
*temp1=*temp2;
*temp2=te