递归函数,它接受一个数组并以相反的顺序显示元素

时间:2015-10-04 12:52:16

标签: c arrays recursion

我只想使用递归函数以相反的顺序打印数组。 以下是我的代码。这段代码反向打印所有字符但是第一个元素总是丢失,因为最后一次返回总是数组(1)(1是数组的索引.....我实际上并不知道内存地址)而不是阵列(0)。

代码:

#include<iostream>
using namespace std;

void array(char *s){
    if(*s=='\0') return;
    array(++s);
    printf("%c",*s);
}
int main(){
    char s[20];
    gets(s);
    cout<<"\n";
    array(s);
    return 0;
}

5 个答案:

答案 0 :(得分:2)

更改方法:

void array(char *s){
    if(*s=='\0') return;
    array(s + sizeof(char));
    printf("%c",*s);
}

要:

++s

因为s++printf更改了影响router.patch('/api/data', function *(next) { if (_.has(this.query, 'id')) { // do data patch this.status = 200; this.body = yield {status: 200, body: 'OK'}; } else { this.status = 304; this.body = yield {status: 304, body: 'expecting id}; } }); 的指针变量,并使您始终打印下一个字符。

答案 1 :(得分:1)

更改

 array(++s)

 array(s+1)

因此您可以为s语句保留printf的正确值。

#include <iostream>
#include <stdio.h>
using namespace std;

void array(char *s){
    if(*s=='\0') return;
    array(s+1);
    printf("%c",*s);
}
int main(){
    char s[20];
    gets(s);
    cout<<"\n";
    array(s);
    return 0;
}

答案 2 :(得分:1)

你可以这样写 -

void array(char *s,int i)
{
    if(s[i]=='\0') return;
    array(s,i+1);          // i declared in main as int i=0 and call as array(s,i) in main
    printf("%c",s[i]);
 }

答案 3 :(得分:0)

您的代码很好,但为什么您没有得到答案, &#39; \ 0&#39;当用户键入enter按钮时,这可以正常工作,但是,当用户输入输入时,他不会在开头键入enter,因此您的代码不适用于那一个字母。 现在要管理这个程序你可以这样做,将第一个字符存储在另一个变量中并最后显示它。

答案 4 :(得分:0)

只需使用array(s+1);代替array(++s);即可保留第一个值。

N.B:应该注意的是,在进行像这样的指针运算时最好使用sizeof()

相关问题