1. 程式人生 > >C語言簡單遞迴實現字串逆序輸出

C語言簡單遞迴實現字串逆序輸出


題目內容的 “注意” 已經側面規定了要用遞迴來實現:

輸入是一個可能含有空格的串說明要用gets來讀入字串,如果利用scanf的話是無法讀入一段含有空格的串。

下面先上一般方法:

#include "stdio.h"
#include "string.h"
char *reverse(char *str)   
{   
 if( !str )                     //判斷輸入字串是否為空串
 {   
  return NULL;                  //若為空串則返回NULL
 }   

    int len = strlen(str);  
    if( len > 1 )   
    {   
        char ctemp =str[0];   
        str[0] = str[len-1];      
        str[len-1] = '\0';      // 最後一個字元在下次遞迴時不再處理   
        reverse(str+1);         // 遞迴呼叫   
        str[len-1] = ctemp;   
    }   

    return str;   
}
int main()
{
        char str[100];
        gets(str);
        reverse(str);
        puts(str);
        return 0;
}

這個char型函式返回字串的首位,簡單的利用字串首位和尾位交換,得到逆序的字串。

但是題幹只要你輸出逆序後的字串,也就有了更簡單的方法:

#include "stdio.h"
void fun(char *x)
{
	if(*x){                    //若該字元型變數為0(ascii碼值為0,不是數字'0')的字元則不進入
		fun(x+1);          //遞迴呼叫
		printf("%c",*x);   //輸出單個字元
	}
}
int main()
{
	char str[100];
	gets(str);
	fun(str);
	return 0;
}

這個遞迴函式是void型函式,遞迴的作用是,每次讀入一個字串中的字元,先不執行遞迴中的printf,遞迴到最後一個字元的後面是0,則結束,從最後一次的遞迴的printf依次反向執行,從而實現逆序輸出的作用。

這個函式很簡單,但對於小白來說,來理解這個遞迴也是比較複雜的。(我寫的時候畫了個記憶體圖來幫助理解)

第一個遞迴函式是將字串逆序處理了,輸出要在主函式中輸出。

第二個遞迴函式是在遞迴中從最後一個字元依次輸出字元。

END

2333,第一次寫部落格,大一剛接觸C語言幾個月,如果有錯誤,多謝指出,共同學習才是墜吼的!