編寫一個函數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; }