如何扭转c中的单词

时间:2013-07-13 13:42:08

标签: c word reverse

我正面临这个问题,我无法让它工作

#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 个答案:

答案 0 :(得分:2)

首先出现的错误是:

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

因此您尝试使用用户输入填充toBeRev,但%s需要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'] ['我'] ['\ 0'] 第二次调用该字符串将是['I'] ['\ 0'] 调用['\ 0'] 然后打印字符串的第一个字符 IH

答案 1 :(得分: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;
    }
}

答案 2 :(得分: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;
}

以上应该做你需要的。

答案 3 :(得分:0)

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

void StrReverse (char *str)
{
    if(*str)
    {
        StrReverse(str+1);
        putchar(*str);
    }
}