仅使用指针递增/递减重写函数

时间:2011-11-13 09:33:26

标签: c++

任何人都可以帮我重写下面我只用点和指针增量/减量写的函数吗?我对指针没什么经验,所以我不知道该怎么做。

void reverse(char * s)
{
    int i, l = strlen(s);
    char c;
    for(i = 0; i < (l >> 1); i++)
    {
       c = s[i];
       s[i] = s[l - i - 1];
       s[l - i - 1] = c;
    }
}

不要使用指针运算或数组表示法。 关于如何重写上述功能的任何帮助或提示都是适用的。 这不是一个作业问题,这是Big C ++书中的高级指针程序之一。 谢谢!

2 个答案:

答案 0 :(得分:4)

void reverse(char* s)
{
    char* end(s);
    while (*end) ++end;
    std::reverse(s, end);
}

答案 1 :(得分:1)

仅使用指针递增和递减将是这样的,它可以变得更紧凑,但它变得不那么可读,因为有些人可能会遇到麻烦并且理解它。 while可以像你一样for,但这更像是指针

在GCC 4.5.1中测试:

void rev(char* s)
{
    char c;
    char* e = s;
    while(*e) e++;
    e--;
    while(s < e)
    {
        c = *s;
        *s = *e;
        *e = c;
        e--;
        s++;
    }
}

但是,如果您使用C ++,则应该使用std::string ...