C語言簡單遞迴實現字串逆序輸出
阿新 • • 發佈:2019-02-14
題目內容的 “注意” 已經側面規定了要用遞迴來實現:
輸入是一個可能含有空格的串說明要用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語言幾個月,如果有錯誤,多謝指出,共同學習才是墜吼的!