我正面临这个问题,我无法让它工作
#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");
}
我应该请求一个单词,并将其发送到函数以使其反转。
答案 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);
}
}