2011-11-13 5 views
-4

誰も私がポイントとポインタの増減を使って以下に書いた関数を書き直すのを助けることができますか?私はポインタで多くの経験を持っていないので、私は何をすべきか分からない。ポインタのインクリメント/デクリメントのみを使用して関数を書き直す

void reverse(char * s) 
{ 
    int i, l = strlen(s); 
    char c; 
    for(i = 0; i < (l >> 1); i++) 
    { 
     c = s[i]; 
     s[i] = s[l - i - 1]; 
     s[l - i - 1] = c; 
    } 
} 

ポインタ演算または配列表記を使用しないでください。 上記の関数を書き直す方法に関するヒントやヒントがある場合 これは宿題の問題ではない、これはBig C++ブックからの進歩的なポインタプログラムの1つです。 ありがとう!ポインタのみインクリメントとデクリメントを使用して

+0

この宿題はありますか? – ibid

+6

ポインタの増分/減分をポインタ演算を使用せずに使用する方法はありますか? – Mankarse

+0

Umm、ポインタの増分と減分はポインタ演算の形式です。具体的に何をしたいのか、したくないのかを明確にしてください。また、これは宿題の問題ですか?そうでない場合は、なぜポインタの増分と減分だけですか? –

答えて

4
void reverse(char* s) 
{ 
    char* end(s); 
    while (*end) ++end; 
    std::reverse(s, end); 
} 
1

はこのようなものになるだろう、それはよりコンパクトにすることができますが、それは一部の人々はトラブルがこの上かすめると、それを理解している可能性がありますあるとして、それは、読みにくくなります。あなたが持っているが、これは、よりpointer'y

GCC 4.5.1でテスト

あるようwhileforことができます:

void rev(char* s) 
{ 
    char c; 
    char* e = s; 
    while(*e) e++; 
    e--; 
    while(s < e) 
    { 
     c = *s; 
     *s = *e; 
     *e = c; 
     e--; 
     s++; 
    } 
} 

しかし、あなたがC++を使用している場合、あなたはstd::stringを使用する必要があります...

+0

あなたがchar * e = sを設定すると?ポインタは配列の最初の要素を指すか、配列全体を指しますか? –

+0

@RichardNguyen:ポインタは配列の最初の要素を指します。配列の最初の要素は配列の先頭にあるので、ポインタも配列全体の先頭を指しています。 – Mankarse

関連する問題