当前位置: 代码迷 >> 综合 >> C程序设计语言 4-12
  详细解决方案

C程序设计语言 4-12

热度:53   发布时间:2024-01-20 04:20:38.0

 练习4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。

递归真挺难的。。。

#include <stdio.h>void recursion_itoa(int d, char *ptr, char *s);
void reverse(char *s, char len);
int int_len(int d);int main()
{int input, len;char s[6];char *p = s;printf("please input interger:\n");scanf("%d", &input);len = int_len(input);recursion_itoa(input, p, s);s[len] = '\0';reverse(s, len);printf("input in string form:%s\n", s);return 1;
}void recursion_itoa(int d, char *ptr, char *s) //递归函数
{if (d / 10){recursion_itoa(d / 10, ptr + 1, s);}*ptr = d % 10 + '0';return;
}void reverse(char *s, char len)    //因为递归在回溯的时候指针没法保存,只能调用递归前的指针值,所以最终生成的字符串是反的,其实可以用static类型,但我不想搞了。。。
{int i, j, temp;for (i = 0, j = len - 1; i < j; i++, j--){temp = s[i];s[i] = s[j];s[j] = temp;}return;
}int int_len(int d)    //reverse函数需要知道字符串的长度
{int len = 0;if (d < 0)len++;while (d % 10){d /= 10;len++;}return len;
}