4

目标:仅使用指针表示法,编写一个函数,将字符列表中的所有值向左(朝向开头)旋转一个元素。

#include <stdio.h>

void rotateLeft( char word[] );

int main (void)
{
//  Local Definitions
    char word[20] = "applications";
//  Statements
    printf( "Before rotation: %s\n", word );
    rotateLeft( word );
    printf( " After rotation: %s\n", word );
    return 0;
}

/*  =================================================================== */
/*  Rotate left
    PRE: word[]
    POST: word rotated left
*/
void rotateLeft( char word[] )
{
    char hold;
    char *pW;
    pW = word;
    hold = *pW;

    while (*pW != '\0')
    {
        printf("%c ", *pW);
        *pW = *(pW + 1);
        *pW++;
    }

    *(pW - 1) = hold;
    *pW = '\0';

    return;
}

我的导师告诉我使用 *(pW + 1) 是一种非常丑陋的风格。我想知道是否有另一种方法可以在不使用我当前使用的样式的情况下解决此解决方案。

4

1 回答 1

4

*(pW + 1)是一样的pW[1]。不过,我不知道“非常丑陋”。事实上,在某些情况下,它可能是首选。实际上,您在问题的开头说过,无论如何,您应该只使用指针表示法。也许你的导师只是不喜欢这个名字pW?您不需要它 - 因为您不需要word其他任何东西,您只需将pW程序中的所有引用替换为word.

您应该注意,在您的程序中,*pW++与 没有任何不同pW++。用 clang 编译你的程序会给出这个方便的警告:

example.c:35:13: warning: expression result unused [-Wunused-value]
            *pW++;
            ^~~~~
1 warning generated.

你也不需要这*pW = '\0'条线。由于您没有修改现有的空终止符,因此该语句只是用 a 覆盖\0a \0

于 2013-01-30T23:33:54.183 回答