逆序输出有很多种,具体的实现方法取决于你题目的要求
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站制作、云安网络推广、小程序定制开发、云安网络营销、云安企业策划、云安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供云安建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
1. 如果只是要求逆序输出,那么可以采用类似的方法:
void reverse(char *s)
{
if(*s=='\0')
return;
reverse(s+1);
printf("%c",*s);
}
这种方法在s很长的情况下会一直递归到底,不是很好。
2. 如果需要将字符串整个逆序在函数外面输出,那么可能希望采用返回字符串指针的方式;实现如下:
char * reverse( char* s )
{
static char *p = s+strlen(s)-1; //p是一个静态变量,指向当前递归层处理的字符串尾,而s指向字符串头
if(s p)
{
char c = *p; //交换头尾字符
*p = *s;
*s = c;
p--; //尾向前挪一个
reverse(s+1); //相当于头向后挪一个
}
return s;
}
3.1 当然,有的时候,并不需要reverse函数本身递归,而是可以借助一些辅助的递归函数,比如说:
void reversehelp(char * head, char * end)
{
if (head end)
{
char c = *head;
*head = *end;
*end = c;
reversehelp(++head, --end);
}
}
然后在调用时像这样调用:
char * reverse(char * s)
{
char * end = s + strlen(s) - 1;
reversehelp(s, end);
return s;
}
3.2 类似的辅助函数还可以采用一个字符串指针和一个长度参数的方式,如下例:
void reversehelp( char* s, int n )
{
if ( n 1 )
{
char c = s[n-1];
s[n-1] = s[0];
s[0] = c;
reversehelp( s+1, n-2 );
}
}
然后在调用时如下:
char *reverse(char *s)
{
reversehelp( s, strlen(s) );
return s;
}
可以将输入的多位数顺序存放到一个数组中,之后逆序输出即可。
具体的实现方法可以参考如下程序:
#includestdio.h
#includestring.h
void main()
{
char num[20];
int i;
printf("输入一个多位数:")
scanf("%s", num); // 将多位数作为一个字符串的形式一次性输入,保存在num数组中
// 将数组num中的字符逆序输出,即实现多位数的倒序输出
for(i=strlen(num)-1; i=0; i--)
printf("%c", num[i]);
}
定义一个整数类型的输入,然后让它正序输出,倒序输出相信是很多C语言初学入门一定会遇到的经典题目,下面就是我对整数的正序和倒序输出一点小小的总结.
1.
反序(倒序)输出
反序输出常用的思路就是按位取余,把取出来的值进行循环保存。
int
main()
{
int
i=12345;
//定义一个12345的整数
int
temp=0;//temp作为存储的值
while(i!=0){
temp
=
temp*10
+
i%10;
i/=10;
}
//反序取出来
printf("%d",temp);
//打印
return
0;
}
如图所示:
2,
正序输出
正序输出会用在整形变量正序输出转换成对应的字符数组,或者倒过来.常用思路就是定义一个函数,在函数内递归取余调用自身,实现功能。
输入
:
12345
输出
:"12345"
如下:
char
str(int
x)
{
char
a[100];//存放整数转换过来的字符
int
i;
//计数
if(x/10!=0)
str(x/10);
if(x=0)
a[i]='0'+x%10;
//整数转换成字符存储,字符都是以整数形式存储
else
a[i]='0'+(-x)%10;//整形包括负数
printf("%c",a[i++]);
}
int
main()
{
int
i;
printf("请输入一个整数:\n");
scanf("%d",i);
str(i);
return
0;
}
如图所示:
调用下面的函数将字符串逆序,然后输出到文件即可。
char* str_reverse(char* str)
{
int n = strlen(str) / 2;
int i = 0;
char tmp = 0;
for(i = 0; i n; i++)
{
tmp = str[i];
str[i] = str[strlen(str)-i-1];
str[strlen(str)-i-1] = tmp;
}
return str;
}