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 取 achar*而不是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'] 第二次调用字符串将是 ['I']['\0'] 第三次调用 ['\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 reverse(char str[]) {    
    int i;
    char c;
    int len = strlen(str);

    for (i=0; i< len/2; i++) {
        c = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = c;
    }
}
于 2013-07-13T14:02:47.110 回答
0

字符串反向递归但...:

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