编写一个函数reverse_string(char * string)

    实现:将参数字符串中的字符反向排列。

    要求:不能使用C函数库中的字符串操作函数。

  1. 非递归实现

void reverse(char *str)
{
	char *left = str;
	char *right = str + strlen(str) - 1;
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

2.递归实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char* reverse_string(char * string,int len);
	int i,LEN=0;
	char arr[]="abcd";
	LEN=strlen(arr);
	char ret[LEN];
	char *p=arr;
	for(i=0;i<LEN;i++)
		ret[i]=*(reverse_string(p,LEN));
	printf("%s\n",ret);
	system("pause");
	return 0;
}
char* reverse_string(char * string,int len)
{
	int static j=0;
	char s[len]="0";
	if(*string=='\0')
		return s;
	else
	{
		s[len-j]=*string;
		j++;
		reverse_string(string++);
	}
}

递归优化:

int length(char *str)
{
	int count = 0;
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}
void reverse(char *str)
{
	int len = length(str);
	if (len== 0)
	{
		return;
	}
	else
	{
		char tmp = *str;
		*str = *(str + len - 1);
		*(str + len - 1) = '\0';
		reverse(1+str);
		*(str + len - 1) = tmp;
	}
}
int main()
{
	char arr[] = "bit-tech";
	reverse(arr);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

递归调用图如下递归实现字符串翻转_字符串