首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >itoa的指针版本

itoa的指针版本
EN

Code Review用户
提问于 2014-02-05 14:38:27
回答 1查看 849关注 0票数 2

用指针而不是数组索引重写前面章节中的批准程序和练习。良好的可能性包括getline(第1章和第4章)、atoiitoa及其变体(第2、3和4章)、reverse(第3章)以及strindexgetop(第4章)。

这是我的解决方案:

代码语言:javascript
复制
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中下一个空闲槽的指针。在最深层的递归中,它返回指向数组的第一个元素(或分支)的指针。

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-02-05 16:17:19

itoa的标准版本接受一个名为base的参数(您假设它是10)。

您可能不需要第二个隐藏函数;相反,可以这样做:

代码语言:javascript
复制
if (n < 0)
{
    *s++ = '-';
    n = -n;
}
// ... itoa implementation continues here ...

递归很聪明;您也可以使用两个循环(前面的未测试代码)来完成这个任务:

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/40961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档