实现字符串翻转

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

void str_reverse(char *str);
void string_reverse(char *str, int length);
int main(void)
{
	int len;
	/* 
	* The string str="hello!" is in heap space if 
	* change it will occur segmentation fault
	*/
	char *str = "hello!";
	char a[] = "hello";
	char b[] = "What's fuck!";
	char *temp = NULL;
	printf("before reverse string is:%s\n", a);
	len = strlen(a);
	string_reverse(a, len);
	printf("after reverse string is:%s\n", a);
	
	printf("before reverse string is:%s\n", b);
	str_reverse(b);
	printf("after reverse string is:%s\n", b);
	return 0;
}

void str_reverse(char *str)
{
	char *end = str;
	char ch;

	// Find the end character of string
	/*
	*
	*
	*
	* As far as i know and test the following way 
	* ----------------------------
	* while(*end){
	* 	++end;
	* }
	* ----------------------------
	*
	* to walk string is better than 
	* -------------------
	*	while(*end++); 
	*	end -= 2;
	* -------------------
	* because *end 
	* will over the end of string'\0' that means
	* it will go to other's house.
	* if the house is not allowed to access and that 
	* will occur segment fault
	*/
	while(*end){
		++end;
	}
	--end;

	// Reverse the string
	while(end > str){
		ch = *str;
		*str++ = *end;
		*end-- = ch;
	}
}

void string_reverse(char *str, int length)
{
	// Make pointer *end point to the end('\0') of string
	char *end = str;
	while(*end){
		++end;
	}
	// Make *end point to the last character of string
	--end;

	// Reverse the string
	char temp_c;
	// Take half of the length
	int  half_len = (length >> 1);
	while(half_len-- > 0){
		temp_c = *str;
		*str++ = *end;
		*end-- = temp_c;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值