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.
#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.
相关文章推荐
- 编写一个函数func(),将此函数的输入参数(int型)逆序输出显示,如54321 –> 12345,要求使用递归,并且函数体代码不超过8行
- 写一个函数,输入int型,返回整数逆序后的字符串。如:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串
- java 用递归实现:输入一个整数,用字符串逆序输出,例如输入123,输出321 ,不使用全局变量
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
- 递归的使用:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n。将输出结果保留到至少8个小数点。
- 【c语言】递归实现,输入一个非负整数,返回组成它的数字之和
- 四则混合运算,输入不带空格的字符串。返回结果
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- 使用C语言,将输入字符串中的大写的字母(A~Z)选出来,组成新的字符串输出。
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 将一个字符串逆序(用递归实现不能使用库函数)
- C语言:用递归实现将输入的整数按逆序输出。如输入12345,则输出54321。
- 数据结构与算法——用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 1.百度150道题,今天开刷。1.用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
- 【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 实现C语言的拷贝函数且将复制后的字符串逆序,不能使用库函数,不能定义其他的变量。
- 写一个函数,输入int型,返回整数逆序后的字符串
- C语言:从键盘输入一个字符串,以感叹号!作为结束标志,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。