字符串反转函数,不定义局部变量,不使用库函数,不使用递归

/*闲来无聊,偶尔在网上看到这么一道考试题目:
要求实现一个c函数,函数内不能使用任何新定义的变量、不能使用包括strlen在内的任何库函数,也不能使用递归方法。
看到给出的答案,不是错的就是不严谨的,包括百度知道采纳的答案。
手痒,也试一试。
*/

#include <stdio.h>
#include <string.h>


/*
功能:字符串反转函数
要求:函数内不能使用任何新定义的变量、不能使用包括strlen在内的任何库函数,也不能使用递归方法。

关键要点:
1、充分利用 '\0' 占位符,用于缓冲及判断
2、使用异或操作交换两个变量
*/
void reverse(const char *src,char *dst)
{	
	
	if ((src==NULL)||(*src=='\0'))
	{
		return;
	}		
	*dst='\0'; //此时dst 第一个字符为'\0',用于后面计算字符串起始位置

	//src 拷贝到 dst,dst 从第二个字符位置开始赋值
	for (dst++;(*src)!='\0';src++,dst++)
	{
		*dst=*src;	
	}

	dst--; //此时dst实际上指向最后一个字符
	src=dst; //设置src 指向目标字符串的最后一个字符

	//设置dst指向目标字符串的第一个字符(此时该字符为'\0')
	while (*dst!='\0') 
	{
		dst--;
	}		
	
	//以上操作后,得到目标字符串的首尾指针,dst 指向头部,src 指向尾部,注意此时目标字符串的第一个字符是'\0'
	//字符串两边两两交换,使用位异或操作
	for (;dst<src;dst++,src--)
	{
		*dst^=*src;
		*((char*)src)^=*dst;
		*dst^=*src;			
	}		

}

//demo
int main(int argc,char** argv)
{
	char src[100]={0},dst[100];
	
	printf("Input a source string contains not more than %u characters:",sizeof(src));
	scanf("%s",src);


	reverse(src,dst);
	printf("reverse Result:%s\n",dst);
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值