1. 程式人生 > >將參數字符串中的字符反向排列,遞歸實現

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

一次 方法 () 如何 遞歸 reverse 字符串數組 較高的 []

這是面試中出現頻率較高的問題,可以使用循環實現逆置也可以用遞歸的實現,首先為大家展示循環的方法,這是比較簡單也更容易理解的,下面看代碼

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
Reverse(char arr[],int left,int right)
{
char tmp;
while (left < right) //當數組左下標小於右下標是進行循環逆置數組
{
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;

left++;
right--;
}
}
int main()
{
char arr[80] = "0"; //對數組初始化
scanf("%s", &arr);
int left = 0; //將數組左下標設置為0
int right = strlen(arr) - 1;//計算出 數組的右下標
Reverse(arr,left,right);
printf("%s", arr);
system("pause");
return 0;
}

下面我們來看如何用遞歸的方法將字符串數組進行逆置,比較而言難以理解但只要搞清楚遞歸的過程便將復發的問題簡單化了,通過代碼來說明問題

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
Reverse(char p)
{
char tmp = 0;
int len = strlen(p);
tmp =
p;
p = (p + len - 1);
(p + len - 1) = ‘\0‘; //將最後一個元素放成‘\0’是為了在下一次計算長度時更加方便,也是用遞歸實現的必要條件
if (strlen(p + 1)>1)//判斷第一次交換完後的字符串長度是否大於1,小於1則不需要交換了
{
Reverse(p + 1);//指向下一個元素,遞歸
}
(p + len - 1) = tmp; //此操作前是遞的過程,而這一步則是歸的過程
}
int main()
{
char arr[] = "0";
scanf("%s", &arr);
Reverse(arr);
printf("%s", arr);
system("pause");
return 0;
}

由此可見遞歸的方法雖然代碼簡單但是思考起來比較復雜這也是普遍現象,希望大家可以很好的理解這兩份代碼

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