[英]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.