2017-04-12 11 views
-2
  • なぜ私の逆関数は文字列をHelloに戻さないのですか?私は私の機能を2回目に呼んでいますか?逆関数配列文字列

  • 私の機能を使用して、文字列を複数回逆転させることができますか?

    #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

あなたはreverse()内部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()呼び出し、:

それは次のようになります。

0

もう一度同じ文字列を使用しています。あなたの関数は無効です。実際には文字列自体は何もしません。逆順で文字を印刷するだけです。あなたが望むものについては、あなたが変数でやっていることを保存してからそれを返す必要があり、関数を使って別々に印刷する必要があります。

0

リバース関数の引数(myString)は、main関数から呼び出したときに2回同じです。あなたは、サブモジュールで逆の代わりに逆のフォーマットで文字を印刷しているだけです。

1

あなたが言葉「こんにちは!」と逆にしたい場合は、文字列として定義し、機能reverse(p1, p2)のパラメータは他にreverse(first_position, last_position)

でなければなりませんreverse(myString.begin(), myString.end())またはreverse(&myString[0], myString.length())

を使用する方が便利です。文字列を実際にcharとして定義したい場合は、それらを反復の中に入れてから、それを一つずつ逆にする必要があります。 reverse機能について

詳細はあなただけの逆の順序で印刷されている、あなたは文字列を逆にされていないhttp://www.cplusplus.com/reference/algorithm/reverse/