再帰。私は他のオンラインソリューションをチェックしていて、彼らは私とほとんど同じであるようです。 コードは文字列を(その位置で)逆にする必要がありますが、そうではありません。たとえば、入力がst2 = "abcdefg"の場合、出力は空の文字列です。私はst2 = "gfedcba"を期待していた。私は何が欠けていますか?再帰:その位置の逆文字列
#include <stdio.h>
#include <string.h>
void recurse_reverse(char s[], int sz)
{
int i=0,j = sz -1;
if(i<j)
{
swap(&s[i],&s[j]);
recurse_reverse(s+1, sz-2);
}
}
void swap(char* s1, char *s2)
{
char tmp;
tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
int main(void)
{
char st1[9] = "abcdefg", st2[9];
strcpy(st2,st1);
recurse_reverse(st2,9);
printf("s1 = %s\ns2 = %s",st1,st2);
printf("\n");
return 0;
}
あなたはrecurse_reverse' 'に' strlenを(ST2)を '渡す必要があります。 – Groo
あなたが入れ替える最初の文字の1つは文字列の最後になる ''\ 0'です。 – pmg
st1の唯一の目的は、古い値を表示することです。削除してst1してコードを確認してください。私はそれがあなたを混乱させるとは思わなかった。 recurse_reverseの関数プロトタイプは次のようになっています:void recurse_reverse(char s []、int size); st1 [9]が存在せず、strcpy()が存在せず、逆にしたいst2 [9] = "abcdefg"としましょう。ありがとうございました。 – Mynicks