这个reverseString算法如何工作?

时间:2013-01-23 17:21:13

标签: c string reverse

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

    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”。但是,如果我在函数reverseString的最后一行做printf("%s\n", original_string);,我就得到“leh”。那是为什么?

1 个答案:

答案 0 :(得分:4)

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

你不需要返回任何东西 - 字符串是相反的,所以参数同时进出。

3)在函数中,你获取指向字符串的指针的副本,你在执行期间修改它,所以当指针被最后一行修改时,它将不再指向字符串的开头,而是指向字符串的开头。中间,它留在最后。