遞歸實現 參數字符串中的字符反向排列

編寫一個函數reverse_string(char * string)(遞歸實現)數組

實現:將參數字符串中的字符反向排列。ide

要求:不能使用C函數庫中的字符串操做函數。函數


若是原字符串是"abcdef",將它用遞歸的方式翻轉成"fedcba";spa

則原數組內存的是  "abcdef\0"指針

調用函數先將字符a保存起來,將f換到a的位置,再將原f的位置置爲"\0"blog

調用函數指針向前走一個位置,傳給函數的參數字符串變爲"bcde\0"遞歸

再將字符b保存起來,將e換到b的位置,再將原e的位置置爲"\0"內存

調用函數指針向前再走一個位置,傳給函數的參數字符串變爲"cd\0"字符串

再將字符c保存起來,將d換到c的位置,再將原d的位置置爲"\0"get

字符串變爲"d\0";

而後 ,

退出一次函數調用,將保存起來的c放到"\0"的位置,參數字符串變爲"dc\0"

退出一次函數調用,再將保存起來的b放到"\0"的位置,參數字符串變爲"edcb\0"

退出一次函數調用,再將保存起來的a放到"\0"的位置,參數字符串變爲"fedcba\0"


字符串由長變短再變長

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char reverse_string(char * string)
{
	assert(string);
	int len = strlen(string) - 1;
	char tmp;
	if (len > 0)
	{
		// 指針形式
		tmp = *string;
		*string = *(string + len);
		*(string + len) = '\0';
		reverse_string(string + 1);
		*(string + len) = tmp;

		// 數組下標形式
		/*tmp = string[0];
		string[0] = string[len];
		string[len] = '\0';
		reverse_string(string + 1);
		string[len] = tmp;*/
	}
	return string;
}
int main()
{
	char arr[] = {0};
	scanf("%s", arr);
	printf("原字符串是:>  %s\n",arr);
	reverse_string(arr);
	printf("翻轉後的字符串是:>%s\n",arr );
	system("pause");
	return 0;
}

wKiom1ZAd9yyp63XAAAcr6oQcv0347.png

相關文章
相關標籤/搜索