2017-04-11 48 views
-4

我想使用下面的程序來扭轉使用陣列,如在第一個字符的話由最後一個字被替換使用字符數組:逆向在C + +

void reverseit(char arr[]) 
    { 
    int len= strlen(arr); 

    for(int i=0; i<=len/2; i++) 
     { 
       char temp=arr[i]; 
       arr[i]=arr[len-i]; 
       arr[len-i]=arr[i]; 
     } 
} 
    int main() 
    { 
    char arr[100]={}; 
    cout<<"enter words: "; 
    cin.get(arr,100); 
    reverseit(arr); 
    cout<<arr; 
    } 

似乎有是沒有錯誤,但是當我在主輸出數組沒有輸出產生,任何線索?

+2

請再次閱讀內部循環,並想知道'temp'應該用在哪裏。儘管你應該好奇你爲什麼不使用['std :: swap'](http://en.cppreference.com/w/cpp/algorithm/swap)。 –

+0

此外,該操作甚至沒有意義!你看,現在一個「字符」可能跨越多個「字符」。 –

+1

您正在交換第一個字節和尾部空字節。難怪你的翻轉字符串是空的。 –

回答

0

正如@Werner Henze指出的那樣,函數實際上是將空字節倒轉到第一個字節。

從反向算法中排除字符串終止空字節應該做的伎倆。

void reverseit(char arr[]) 
{ 
    int len= strlen(arr) - 1; 

    for(int i=0; i<=len/2; i++) 
    { 
     char temp=arr[i]; 
     arr[i]=arr[len-i]; 
     arr[len-i]=temp; 
    } 
}