1

私はこの問題に直面しています。私はそれを機能させることができません

#include <stdio.h>
#include <string.h>

void RecursiveReverse(char word)
{
    if (word == '\0')
        return;

    RecursiveReverse(word + sizeof(word));

    printf("%c", word);
}

int main(void)
{
    printf("enter a word please =>"); 
    char toBeRev;
    scanf("%s", toBeRev); 

    RecursiveReverse(toBeRev);

    printf("\n");
}

単語を要求し、それを関数に送信して逆にすることになっています。

4

4 に答える 4

3

あなたが何かをする最初の間違い:

char toBeRev; 
scanf("%s", toBeRev); 

したがって、toBeRev にユーザー入力を入力しようとしましたが、%s は a を取り、そうではchar*ありませんchar

したがって、ユーザーの入力を格納できるバッファーが必要です。

char input[4096] = {0};

次に、文字列を逆の順序で出力するだけでよいので、文字列の値を変更する必要がないと言い、再帰関数から始めました (これは良い考えです)。

私はあなたの例に従って何かをしました

  void reverse(const char *str) //you don't need to modify your string
   { 
      if (*str != '\0') //if the first character is not '\O' 
        reverse((str + 1)); // call again the function but with +1 in the pointer addr
      printf("%c", *str); // then print the character
    }

int main()
{
  char input[4096] = {0};

  printf("Enter a word please => ");
  scanf("%s", input);
  reverse(input);
  printf("\n");
  return (0);
}

したがって、入力が「Hi」の場合、入力には ['H']['I']['\0'] が含まれます。

文字列を逆にする最初の呼び出しは ['H']['I']['\0'] です。2 番目の呼び出しは ['I']['\0'] です。3 番目の呼び出しは ['\0'] です。文字列の最初の文字を出力するので、IH

于 2013-07-13T14:27:55.383 に答える
0
#include <stdio.h>
#include <string.h>

void RecursiveReverse(char* word, int len) {
    printf("%c", *word);

    if(len <= 0)
        return;

    RecursiveReverse(--word,--len);
}

int main(int argc, char** argv) {
    char toBeRev[64];
    printf("Enter a word please => ");
    scanf("%s", toBeRev);

    RecursiveReverse(toBeRev + strlen(toBeRev), strlen(toBeRev));

    return 0;
}

上記はあなたが必要とすることをするはずです。

于 2013-07-13T14:12:49.743 に答える
0

文字列の逆再帰はまだ... :

void StrReverse (char *str)
{
    if(*str)
    {
        StrReverse(str+1);
        putchar(*str);
    }
}
于 2013-07-13T14:38:06.947 に答える