0

我已经看到这个算法在线反转字符串,我对此有一些疑问,我将在代码末尾指定:

    void reverseString(char *original_string)
    {
        char *end = original_string;
        char tmp;

        if(original_string) {
            while(*end) {
                ++end;
            }
            --end;
            while (original_string < end) {
                tmp = *original_string;
                *original_string++ = *end;
                *end-- = tmp;
            }
        }
//This line doesn't have the complete reversed string. Why?
printf("%s\n", original_string);
    }

1)在while循环中...为什么要比较两个指针?我们怎么知道这个值会变大还是变小?这些只是指针,对吧?

2) 我们为什么不退货?反转的字符串在哪里?如果我们暗示反转的字符串在 original_string 中,我们不应该使用指向指针的指针以使效果在外部范围内吗?

3)如果我执行以下操作:

char test[] = "hello";
    reverseString(test);
    printf("%s\n", test);

我可以看到“olleh”。但是,如果我printf("%s\n", original_string);在函数 reverseString 的最后一行执行,我只会得到“leh”。这是为什么?

4

1 回答 1

4

您有两个指针指向要反转的部分的开头和结尾。在每一步中,您交换这些指针指向的字符,然后减少要从两个方向(开始和结束)反转的字符串。比较指针有以下含义——直到区间的开始不是在区间的结束之后,我们还有一个要反转的区间。希望这是有道理的。

您不需要返回任何内容 - 字符串被反转到位,因此参数同时输入和输出。

3)在函数中,您获取指向字符串的指针的副本,您在其执行期间对其进行了修改,因此当指针被最后一行修改时,它将不再指向字符串的开头,而是指向中间,它留在最后的地方。

于 2013-01-23T17:25:42.247 回答