字符串反序操作

        字符串反序操作,可以分为两种类型,一种是将字符串的反序存储,一种是将字符串反序输出。
        对于前一种,假设字符串长度为n,可以从第1个字符到第floor(n/2) (取整函数,取得不超过某个数的最大整数)个字符,依次将第i个字符和第n+1-i个字符交换位置。这一结束后,字符串就反序存储了。
        对于后一种,可以采取两种方法。第一种方法是从字符串的最后一个字符逆序遍历到第一个字符,依次打印每个字符。第二种方法是采用递归方法,这里先不做解释,稍后会在具体例子中说明。采用前一种方法简单直观,后一种方法则更加巧妙。
        下面来看一个C语言编写的具体例子。
#include <stdio.h>
#include <string.h>

void inversePrint(const char * const);//将字符串反序打印
void invert(char * const);//将字符串反转存储

int main()
{
	char str[15]="I love China";

	//将原字符串反序存储
	invert(str);
	printf("反序后的字符数组为:\n%s\n", str);
	//将原字符串反序输出
	printf("反序打印的结果为:\n");
	inversePrint(str);
	return 0;
}

void invert(char * const str)
{
	int n = strlen(str);
	int m = n / 2 - 1;//计算中间值的序号
	int i = 0;
	char ch;
	for(i = 0; i <= m; i++)
	{
		//交换对称的数组元素
		ch = str[i];
		str[i] = str[n-1-i];
		str[n-1-i] = ch;
	}
}

//采用递归方法反序输出字符串
void inversePrint(const char * const str)//传入参数为字符数组的起始地址
{
	if(*str == '\0')
	{
			return;//遇到结束符,结束递归,返回上一层
	}
	else
        {
		inversePrint(str + 1);//将以下一个字符为起始元素的子数组的首地址作为实参再次调用
		/*输出单个字符,这是当递归到字符串结束符后开始执行的,执行完成再返回上一层,直到
返回到第一层,输出首个字符*/	
                putchar(*str);
        }
}
 
 

运行结果为:

反序后的字符数组为:

anihC evol I
反序打印的结果为:

I love China

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值