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