将字符串中的字符反向排列

编写:一个函数 reverse_string(char * p)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。

#define  _CRT_SECURE_NO_WARNINGS
#include
#include

char* reverse_string(char* p)
{
	int n = 0;
	char tmp;
	char* q = p;
	while (*p != 0)
	{
		n++;
		p++;
	}
	if (n > 1)
	{
		tmp = q[0];
		q[0] = q[n - 1];
		q[n - 1] = '\0';
		reverse_string(q + 1);
		q[n - 1] = tmp;
	}
	return q;
}

int main()
{
	printf("put some words :\n");
	char p[] = "ma ze zhen de he nu li ";	
	printf("原字符串为:%s\n", p);
	printf("逆字符串为:%s\n", reverse_string(p));

	system("pause");
	return 0;
}

其中n是计算字符串中字符的个数,while()循环目的是算出字符个数,另外,q是p建立的副本,利用p计算出n,但是p也被破环,所以就先把p里面所有的内容赋给q

利用循环实现字符串的逆序:

#include
#include

void nixu(char* arr)
{
	int left = 0;
	int right = strlen(arr) - 1;
	while (left <= right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		--right;
		++left;
	}
}

int main()
{
	char arr[] = "ma ze zhen de hen nu li";
	printf("%s\n", arr);
	nixu(arr);	
	printf("%s\n",arr);
	system("pause");
	return 0;
}

这个代码应该比递归的方法好理解
在while()循环语句里的内容也就是我们正常思路:创建一个临时变量,进行首尾的元素互换,互换之后左边加一,右边减一,当left>right跳出循环。

注意:如果题目要求不能创建临时变量,用递归比较好一点。

你可能感兴趣的:(C语言基础)