gpt4 book ai didi

c - itoa 递归地

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:49 25 4
gpt4 key购买 nike

我一直在尝试编写一个递归版本的函数itoa,代码如下所示。

void itoa(int n, char s[])
{
static int i = 0;

if(n / 10 != 0)
itoa(n/10, s);
else if(n < 0)
i = 1; /* s[0] is allready taken by - sign */
else
i = 0; /* reset i to 0 */

if(n < 0) {
s[0] = '-';
}

s[i++] = abs(n % 10) + '0';
s[i] = '\0';
}

但是代码并不理想。它使用了一个 static 变量,并且执行速度可能没有达到应有的速度。我正在尝试实现一个O(n) 算法。谁能告诉我更好的方法?我也认为静态变量不是必需的,但我不太确定如何避免它。我是否应该将函数分成两部分以避免静态变量?

最佳答案

如果你想递归地解决它,一个更简单的方法可能是返回最后一个索引:

int itoa(int n, char s[])
{
int i = 0;

if(n / 10 != 0)
i = itoa(n/10, s);
else if(n < 0)
s[i++] = '-';

s[i++] = abs(n % 10) + '0';
s[i] = '\0';

return i;
}

你也可以用指针解决它:

char * itoa(int n, char * s)
{
char * dest = s;

if(n / 10 != 0)
dest = itoa(n/10, dest);
else if(n < 0)
*dest++ = '-';

*dest++ = abs(n % 10) + '0';
*dest = '\0';

return dest;
}

但是需要注意的是,此实现很容易出现缓冲区溢出。您需要确定您已经分配了一个足够大的缓冲区来容纳整数的整个 ascii 表示。一个好主意是包括一些边界检查。

关于c - itoa 递归地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com