用指针而不是数组索引重写前面章节中的批准程序和练习。良好的可能性包括
getline(第1章和第4章)、atoi、itoa及其变体(第2、3和4章)、reverse(第3章)以及strindex和getop(第4章)。
这是我的解决方案:
static char *hidden(int n, char *s) {
char *p;
if(n / 10) {
p = hidden(n / 10, s);
}
else {
p = s;
}
*p++ = n % 10 + '0';
*p = '\0';
return p;
}
char *itoa(int n, char *s) {
if(n < 0) {
*s = '-';
hidden(-n, s + 1);
}
else {
hidden(n, s);
}
return s; /* pointer to first char of s*/
}itoa是函数hidden的包装器。函数hidden返回指向数组s中下一个空闲槽的指针。在最深层的递归中,它返回指向数组的第一个元素(或分支)的指针。
发布于 2014-02-05 16:17:19
itoa的标准版本接受一个名为base的参数(您假设它是10)。
您可能不需要第二个隐藏函数;相反,可以这样做:
if (n < 0)
{
*s++ = '-';
n = -n;
}
// ... itoa implementation continues here ...递归很聪明;您也可以使用两个循环(前面的未测试代码)来完成这个任务:
i = 1;
while ((i * 10) <= n)
i *= 10;
for (; i != 0; i /= 10)
{
int x = n / i;
*p++ = (char)(x % 10 + '0');
n -= (x * i);
}
assert(n == 0);https://codereview.stackexchange.com/questions/40961
复制相似问题