|
楼主 |
发表于 2013-1-19 09:47:20
|
显示全部楼层
山西省晋中市
13楼的adslxyz同学已经使用递归轻松解决了本问题,
10楼的素顏同学也已经基本解决了本问题,大家可以去研究一下,
微凉同学的程序虽然也解决了问题,但因为有bug不建议大家使用。
另因为我原先的答案和13楼的类似,所以我将答案升级了一下供大家学习,
可以将任何文本进行重组生成新的文本串,上源码:
[e]
.版本 2
.支持库 shellEx
.程序集 窗口程序集1
.程序集变量 文本分组, 文本型, , "0"
.程序集变量 许可证, 文本型
.程序集变量 组数, 整数型, , "2"
.程序集变量 i, 整数型
.子程序 _按钮1_被单击
.局部变量 计次1, 整数型
.局部变量 长度分组, 整数型, , "0"
' //-- 初始化 ↓
清除数组 (文本分组)
清除数组 (长度分组)
' ↑ 初始化数组,防止累加
编辑框2.内容 = 取空白文本 (0)
' --\\
文本分组 = 分割文本 (删首尾空 (编辑框1.内容), “ ”, )
.计次循环首 (取数组成员数 (文本分组), 计次1)
加入成员 (长度分组, 取文本长度 (文本分组 [计次1])) ' 将各组文本的长度转换为一个数值数组以便进行操作
.计次循环尾 ()
' //--只为了在标题上显示进度 ↓
组数 = { 1, 0 }
.计次循环首 (取数组成员数 (长度分组), 计次1)
组数 [1] = 组数 [1] × 长度分组 [计次1]
.计次循环尾 ()
标题 = 到文本 (组数 [2]) + “ / ” + 到文本 (组数 [1])
' --\\
子程序_处理 (长度分组, &处理子程序)
.子程序 子程序_处理, , , 简化输入
.参数 长度分组, 整数型, 数组
.参数 回调程序, 子程序指针, , 请传入 回调处理子程序地址指针 ,参数:[文本型]以空格分隔的数值文本组合
.局部变量 动态参考数组, 整数型, , "0"
许可证 = 到文本 (取随机数 (0, 取启动时间 ())) ' 初始化标识,防止bug
子程序_递归X (长度分组, 取数组成员数 (长度分组), 取数组成员数 (长度分组), 动态参考数组, 回调程序, 许可证)
.子程序 子程序_递归X
.参数 分组数值, 整数型, 数组
.参数 余数, 整数型, , 请传入 分组数值 的数组成员数,程序内部使用
.参数 总数, 整数型, , 请传入 分组数值 的数组成员数,程序内部使用
.参数 动态参考数组, 整数型, 参考 数组, 请传入临时数组作为子程序内部数据交换使用,勿作它用
.参数 回调程序, 子程序指针, , 请传入 回调处理子程序地址指针 ,参数:[文本型]以空格分隔的数值文本组合
.参数 许可证1, 文本型, 参考, 请传入空文本型参数,防止多次点击后产生冲突bug
.参数 许可证2, 文本型, 可空, 程序内部使用,请留空
.参数 返回参考, 文本型, 参考 可空 数组, 暂未使用
.局部变量 计次, 整数型
.局部变量 计次2, 整数型
.局部变量 tmp, 文本型, , , 临时变量
.如果真 (余数 = 总数) ' 初始化本次许可证校验,防止多次点击后产生冲突bug
许可证2 = 许可证1
重定义数组 (动态参考数组, 假, 总数)
.如果真结束
.变量循环首 (1, 分组数值 [余数], 1, 计次)
动态参考数组 [余数] = 计次
.如果真 (许可证2 = 许可证1) ' 许可证核对正确进入
.如果 (余数 > 1) ' 标识-1>0 递归执行条件:
处理事件 () ' 循环内防止假死
子程序_递归X (分组数值, 余数 - 1, 总数, 动态参考数组, 回调程序, 许可证1, 许可证2)
.否则
.如果真 (余数 = 1) ' 代表递归结束,输出
tmp = 取空白文本 (0) ' 重新置空临时变量
.变量循环首 (1, 总数, 1, 计次2) ' 循环n次 n=取数组成员数(分组数值{初始})
tmp = tmp + “ ” + 到文本 (动态参考数组 [计次2]) ' 进行处理
处理事件 () ' 循环内防止假死
.变量循环尾 ()
.如果真 (许可证2 = 许可证1) ' 赌杀漏网之鱼 防止多次点击后产生冲突bug
执行子程序 (回调程序, 删首尾空 (tmp)) ' 回调结果,进行处理
.如果真结束
.如果真结束
.如果结束
.如果真结束
.变量循环尾 ()
.子程序 处理子程序
.参数 参数一, 文本型
.局部变量 结果分组, 文本型, , "0"
.局部变量 计次, 整数型
.局部变量 当前文本组, 文本型
.局部变量 当前位, 文本型
.局部变量 结果文本, 文本型
结果分组 = 分割文本 (参数一, “ ”, ) ' 得到的只是各个文本分组应取的位置
' 调试输出 (参数一, 参数二)
' 参数二 = 选择 (是否为空 (参数二), 取数组成员数 (文本分组), 参数二) ' 如果 参数二 未传递值,便在程序内部进行处理 本例程因使用回调函数 所以未使用
' 结果文本=取空白文本(0)
.计次循环首 (取数组成员数 (文本分组), 计次) ' 将各个文本分组上对应位置的文本分别取出
当前文本组 = 文本分组 [计次]
当前位 = 取文本中间 (当前文本组, 到整数 (结果分组 [计次]), 1)
结果文本 = 结果文本 + 当前位
处理事件 () ' 防止假死
.计次循环尾 ()
编辑框2.加入文本 (结果文本 + “ | ”)
' //--只为了在标题上显示进度 ↓
组数 [2] = 组数 [2] + 1
标题 = 到文本 (组数 [2]) + “ / ” + 到文本 (组数 [1])
.子程序 __启动窗口_将被销毁
结束 () ' 防止程序运行期间退出时的错误提示音
[/e] |
评分
-
查看全部评分
|