簡體   English   中英

這個reverseString算法如何工作?

[英]How does this reverseString algorithm work?

我已經看到了該算法可以在線上反向字符串,對此我有些疑問,我將在代碼末尾指定它:

    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”。 這是為什么?

您有兩個指針指向該部分的開頭和結尾,需要反轉。 在每個步驟中,都交換這些指針指向的字符,然后減少從兩個方向(開始和結束)反轉的字符串。 比較指針具有以下含義-直到間隔的開始不晚於間隔的結束,我們仍然有一個要反轉的間隔。 希望有道理。

您不需要返回任何內容-字符串在原位被反轉,因此參數可以同時輸入和輸出。

3)在函數中,您獲取指向字符串的副本,並在執行過程中對其進行了修改,因此,由於指針在最后一行被修改,因此它將不再指向字符串的開頭,而是指向字符串的中間,最后留在哪里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM