[問題] 用遞迴做字串反轉..

看板C_and_CPP作者 (神手)時間16年前 (2009/07/04 13:26), 編輯推噓5(5010)
留言15則, 7人參與, 最新討論串1/2 (看更多)
題目是這樣的.... Write a recursive function to reverse a string by C. For example, char a[ ] = "ABCDEFGH" ; printf (" %s \n", a); /* "ABCDEFGH" */ reverse_string (a); printf (" %s \n", a); /* "HGFEDCBA" */ 我怎麼想都想不出只傳一個位址參數的方法 又要遞迴..... 懇請解救~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.81.199.210

07/04 21:37, , 1F
hint:從字串的最中間開始處理
07/04 21:37, 1F

07/04 21:41, , 2F
和&a[x]和&a[strlen(a)-x]換 每次都傳入x+1直到x>strlen/2
07/04 21:41, 2F

07/04 21:42, , 3F
不用&...忘了消掉= =
07/04 21:42, 3F

07/04 21:42, , 4F
不過這樣就沒有 "只" 傳一個參數了 lol
07/04 21:42, 4F

07/04 21:53, , 5F
簡單來說就是把 遞迴 當 Stack 用.
07/04 21:53, 5F

07/04 21:53, , 6F
call遞迴前先把a[strlen(a)-1]改成'\0'就好
07/04 21:53, 6F

07/04 22:01, , 7F
沒看到只傳一個參數@@ 那就每次都把最後一個移到最前面
07/04 22:01, 7F

07/04 22:02, , 8F
再傳a+1如何
07/04 22:02, 8F

07/04 22:03, , 9F
不過complexity會很差就是了...
07/04 22:03, 9F

07/04 22:20, , 10F
HINT: strcpy, int reverse(str) {...} 這樣就可以了
07/04 22:20, 10F

07/04 22:22, , 11F
想法: 除非只剩一個字元,否則保留str[0],call reverse(str)
07/04 22:22, 11F

07/04 22:30, , 12F
建議判斷到長度0,因為有可能傳入空字串
07/04 22:30, 12F

07/04 22:31, , 13F
有 overlap 用 memmove 較好
07/04 22:31, 13F

07/04 22:47, , 14F
每次用memove大小都會給錯囧
07/04 22:47, 14F

07/04 22:47, , 15F
不過還好在這不會
07/04 22:47, 15F
文章代碼(AID): #1AJrYMXB (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AJrYMXB (C_and_CPP)