您的位置:首页 > 编程语言 > C语言/C++

C语言 使用递归 逆序输入的字符串,并且返回保存的结果

2017-10-26 16:45 330 查看
我们可以使用递归来逆序输入的字符串:

#include<stdio.h>
void reverse();
int main()
{
    printf("输入:");
    reverse();
    return 0;
}
void reverse()
{
    char c;    //这里每个函数都分配一个变量c
    scanf("%c",&c);//给本次递归变量c赋值
    if(c!='\n')
    {
        reverse();//读取下个字符
        printf("%c",c);//打印这次读取到的值
    }
}
在打印读入本次读入的字符之前,先读入下一个字符,因为没有读到回车符‘\n’.递归会一直下去。直到读到回车符,递归才返回,然后倒数第二次调用 的printf()语句才可以执行
这时候它读入的是倒数的第二个字符(倒数第一个字符是回车符)。然后倒数第二次的调用结束返回。倒数第三次调用的printf()语句得以执行。

因为先输入的要等待后输入的,后输入的先行打印。从而达到逆序的效果。

运行结果:

输入:123.456abc
cba654.321
Process returned 0 (0x0)   execution time : 7.499 s
Press any key to continue.
上面的代码已经达到了逆序输出的效果了。但是我想保存逆序的结果怎么办。
这时候就要有个容器来保存结果,我这里使用动态的一维字符数组来保存。并且在递归最后一次返回的时候返回这个动态数组,而不是每次都返回,这里使用静态的变量来统计递归的次数,静态的变量是整个递归函数的。只分配一次内存空间。

/**
reverse.c
*/
#include<stdio.h>
#include<stdlib.h>

char* reverse();
int main()
{
    char *p;
    printf("输入:");
    p=reverse();
    printf("保存下来的结果:");
    while(*p!='\0')
    {
        printf("%c",*p);
        p++;
    }
    return 0;

}
char* reverse()
{
    char c;
    scanf("%c",&c);
    static int count=0;//统计读入多少字符,
    static int index=0;//逆序的动态一维数组的下标
    static char *array;//动态一维数组的指针
    if(c=='\n')//结束的时候,
    {
        //动态一维数组比实际的字符个数多一个
        //最后一个放入结束符'\0'
        count++;
        //生成动态一维数组
        array=(char*)malloc(sizeof(char)*count);
        *(array+count-1)='\0';//一维下标从0开始。
        printf(" maxcount=%d\n",count);
    }
    if(c!='\n')
    {
        count++;
        reverse();
        *(array+index)=c;
        printf("%c",c);
        index++;
        printf(" index=%d\n",index);
    }
    //控制返回,只有在最后一次退出递归函数时才返回结果。
    if((index+1)==count)
    {
        printf("返回了哦\n");
        return array;
    }

}
结果:
输入:123.456.abc
maxcount=12
c index=1
b index=2
a index=3
. index=4
6 index=5
5 index=6
4 index=7
. index=8
3 index=9
2 index=10
1 index=11
返回了哦
保存下来的结果:cba.654.321
Process returned 0 (0x0) execution time : 7.073 s
Press any key to continue.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐