2014-06-16 61 views
-1

這個代碼看起來應該是扭轉字符串,而是它反轉的第一個字符,輸出是: - delloworlh字符串逆轉意外輸出

任何想法,爲什麼發生這種情況

int main() 
{ 

    char p[] = "helloworld"; 
    char t; 
    int i, j; 
    for(i=0,j=(strlen(p)-1); i<j; i++) 
    { 
     t = p[i]; 
     p[i] = p[j-i]; 
     p[j-i] = t; 
    } 
    printf("%s", p); 
    return 0; 
} 
+0

請選擇你的答案。 –

回答

3

在你的循環,使用條件:i<j
所以,我達到焦耳/ 2後,它開始修復反向串又恢復到原來的形態。
所以你必須改變你的條件i<j/2+1;

+1

是的,沒錯。但是我正在看這個代碼5分鐘,問我爲什麼他這樣做這麼昂貴的方式。更容易的是創建一個新的數組並將其反向填充。 – Watsche

+0

Yaa ..但是如果我們創建一個新的數組,它會增加空間複雜度。 – Aakash

1

將您的循環條件語句更改爲i <= j-1

for(i = 0, j = (strlen(p)-1); i < j-i; i++){...} 
1

變化

for(i=0,j=(strlen(p)-1); i<j; i++,--j) 
{ 
    t = p[i]; 
    p[i] = p[j]; 
    p[j] = t; 
}