Re: [問題] C做字串互換

作者: Hazukashiine (私は幸せです)   2016-09-07 00:13:50
※ 引述《sagwow (不是我)》之銘言:
: 問題(Question):
: 字串互換
: 餵入的資料(Input): apple dog
: 預期的正確結果(Expected Output):dog apple
: 補充說明(Supplement):
: 我宣告char a[100][1000],想交換其中a[0]和a[1]兩個字串,
: 想請問有沒有不用一個字元一個字元交換的方法。
GitHub Gist: https://gist.github.com/anonymous/ea41f753a335f34a3ec458f730c8f499
不一定要用二維陣列去處理,有 in-place 的 recursive 算法提供參考
大致上的做法就是 先對原字串反轉一次,再對子字串反轉一次就可以了
#include <stdio.h>
#include <string.h>
char *swapstr_rec(char *str, int begin, int end, int first)
{
while (begin < end - 1)
{
char tmp = str[begin];
str[begin++] = str[
作者: hsnuonly (附中only)   2015-07-16 17:40:00
推 這間的軟體大家用過都不會移除
作者: sagwow (不是我)   2016-09-07 15:33:00
感謝,對我來說有點難 研究一下^^a
作者: HolyBugTw (HolyBug)   2016-09-07 16:36:00
我比較推這個處理方法,原理不難啊,就如作者所述"123 abc" -swap-> "cba 321" -swap-> "abc 123"
作者: yvb   2016-09-07 20:44:00
搭配一樓原原PO的排序程式, 好一個嚇人的字串Bubble Sort...
作者: Eleina (艾琳娜)   2016-09-07 23:11:00
leetcode 的 rotate 問題
作者: yvb   2016-09-08 02:27:00
總覺得上面那個 recursive 假假的...把 first=0 獨立拉成一個 sub-function, 就不 revursive 了啊
作者: Hazukashiine (私は幸せです)   2016-09-08 03:07:00
沒有吧~ 這確實算是 tail recursion 不是嗎?然後重用了上半部分 swap 的 codehttps://zh.wikipedia.org/wiki/尾調用確實這也很容易轉寫成迭代的形式 都可以啦 不重要我比較好奇這 code 有什麼實際的應用原原PO好像要的不是這個 我後來才發現 wwwwwww他好像需要的是 swap 任意的子字串 而不是整個的說我終於知道為什麼會這個遞迴看起來假假的了其實就把它想像成邊界條件是層數為一的遞迴就可以了這樣是不是就有一般遞迴的 feel 惹 (づ′・ω・)づ
作者: yvb   2016-09-08 13:33:00
不是 tail recursion. f(n) 最後叫用 f(k) 來結束 f(n) 才是.而你的 swapstr_rec() 最後是 return str;
作者: TeaEEE (愛不趴 不愛趴)   2016-09-08 14:39:00
這樣的做法做了二次的swap好像沒比較快

Links booklink

Contact Us: admin [ a t ] ucptt.com