2017-04-12 50 views
-2
  • 爲什麼我的反向功能不可逆我的字符串返回你好!當我第二次打電話給我的功能?反轉功能陣列字符串

  • 我能怎麼改變用我的功能來扭轉+ dereverse我的字符串多次?

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    
    void reverse(char arr[], int numberOfChars); 
    
    int main() 
    { 
        char myString[] = "Hello!"; 
        int length = strlen(myString); 
    
        for (int i = 0; i < length; i++) 
        { 
         printf("%c", myString[i]); 
        } 
        printf("\n"); 
    
        reverse(myString, length); 
        reverse(myString, length); 
    
        getchar(); 
        return 0; 
    } 
    
    void reverse(char arr[], int numberOfChars) 
    { 
        for (int i = numberOfChars - 1; i >= 0; i--) 
        { 
         printf("%c", arr[i]); 
        } 
        getchar(); 
    } 
    
+0

你是不是扭轉串被發現,你只是在逆順序打印 – Nish

回答

5

因爲你永遠不修改arr[]reverse(),你只打印在你迭代的順序。

它應該是這樣的:

void reverse(char *s, size_t length) 
{ 
    for(size_t i = 0; i < length/2; ++i) 
    { 
    const size_t tail = length - (i + 1); 
    const char tmp = s[tail]; 
    s[tail] = s[i]; 
    s[i] = tmp; 
    } 
} 

也沒什麼奇怪的getchar()呼叫reverse(),那是沒有意義的。

0

您使用的是相同的字符串,第二次爲好。你的功能是無效的,你實際上沒有對字符串本身做任何事情,只是以相反的順序打印字母。你想要的東西,你應該爲你節省一個變量在做什麼,然後返回它,也許用一個函數來單獨打印。當你從main函數調用

0

的參數(MyString的),以反向功能在兩次相同。您只是以反向格式打印字符而不是在子模塊中反轉。

1

如果要扭轉的話「你好!」,這是更方便地把它定義爲字符串,然後使用reverse(myString.begin(), myString.end())reverse(&myString[0], myString.length())

功能reverse(p1, p2)的參數應該是reverse(first_position, last_position)

此外,如果你真的想定義字符串爲char,你應該把它們內部的迭代,然後通過一個扭轉他們一個爲@unwind說。

有關reverse功能的更多詳細信息可在http://www.cplusplus.com/reference/algorithm/reverse/