开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3286|回复: 25
收起左侧

[易语言纯源码] 文本类:取出重复部分

[复制链接]

结帖率:100% (47/47)
发表于 2021-8-19 22:18:22 | 显示全部楼层 |阅读模式   广东省东莞市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 l1299587332 于 2021-8-19 22:32 编辑

算法可能有点不完善,但是够用。



先看效果:

代码:
取出最长公共子串(“不好啊你好啊好啊”,“好啊不吃饭吗”)
效果:
“好啊”



代码:

取出最大重复部分 (“12366666666666666123666”)

效果:

“6666666”



代码:

取出重复部分 (“12366666666666666123666”, tmp)

调试输出 (tmp)

效果:

数组:2{“6666666”,“123”}


代码:

取出重复部分2 (“12366666666666666123666”, tmp)

调试输出 (tmp)

效果:

数组:2{“6666666”,“123666”}




代码:

取出最大重复部分 (“你吃了吗吃了吗吃了吗吃了吧了吧了吧”)

效果:

“吃了吗吃了”



代码:

取出重复部分 (“你吃了吗吃了吗吃了吗吃了吧了吧了吧”, tmp)

调试输出 (tmp)

效果:


数组:1{“吃了吗吃了”}



代码:

取出任意重复部分 (“你吃了吗吃了吗吃了吗吃了吧了吧了吧”, tmp)

调试输出 (tmp)

效果:

数组:10{“吃了吗吃了”,“吃了吗吃”,“吃了吗”,“吃了”,“了吗吃了”,“了吗吃”,“了吗”,“吗吃了”,“吗吃”,“吃了”}







总共包含四个子函数


回复可见






  
子程序名返回值类型公开备 注
取出最长公共子串文本型 动态规划
参数名类 型参考可空数组备 注
text1文本型
text2文本型
变量名类 型静态数组备 注
a正则表达式类 
aa正则表达式类 
str整数型1,1
i整数型 
ii整数型 
maxv整数型 
xmax整数型 
tmp文本型 
如果真 (取文本长度 (text1) = 0 取文本长度 (text2) = 0)
返回 (“”)
如果真 (取文本长度 (text1)取文本长度 (text2))
如果真 (text1 = text2)
返回 (text1)

a.创建 (“\S”, text1, , , , )
aa.创建 (“\S”, text2, , , , )
重定义数组 (str, 假, a.取匹配数量 () + 1, aa.取匹配数量 () + 1)
计次循环首 (a.取匹配数量 (), i)
计次循环首 (aa.取匹配数量 (), ii)
如果真 (a.取匹配文本 (i, ) = aa.取匹配文本 (ii, ))
str [i + 1] [ii + 1] = str [i] [ii] + 1
如果真 (maxv < str [i + 1] [ii + 1])
maxv = str [i + 1] [ii + 1]
xmax = i + 1


计次循环尾 ()
计次循环尾 ()
如果 (取文本长度 (文本区分_只取汉字 (text1, 真, )) > 0)
变量循环首 (xmax - maxv + 1, xmax, 1, i)
tmp = tmp + a.取匹配文本 (i, )
变量循环尾 ()
tmp = 取文本中间 (text1, xmax - maxv, maxv)

返回 (tmp)
子程序名返回值类型公开备 注
取出最大重复部分文本型 
参数名类 型参考可空数组备 注
text文本型
变量名类 型静态数组备 注
a正则表达式类 
i整数型 
max整数型 
box文本型0
tmp文本型 
bool整数型 
a.创建 (“\S”, text, , , , )
计次循环首 (a.取匹配数量 (), i)
加入成员 (box, a.取匹配文本 (i, ))
计次循环尾 ()
计次循环首 (a.取匹配数量 (), i)
max = 取整 ( (a.取匹配数量 () - i + 1) ÷ 2)
如果真 (max = 0)
跳出循环 ()
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环首 (bool = -1 max > i)
max = max - 1
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环尾 ()
如果真 (bool ≠ -1)
如果真 (取文本长度 (取文字部分 (box, i, max)) > 取文本长度 (tmp))
tmp = 取文字部分 (box, i, max)


计次循环尾 ()
返回 (tmp)
子程序名返回值类型公开备 注
取出重复部分 
参数名类 型参考可空数组备 注
text文本型
arr文本型
变量名类 型静态数组备 注
a正则表达式类 
i整数型 
max整数型 
box文本型0
bool整数型 
tmw文本型 
tmp文本型0
len整数型0
a.创建 (“\S”, text, , , , )
计次循环首 (a.取匹配数量 (), i)
加入成员 (box, a.取匹配文本 (i, ))
计次循环尾 ()
计次循环首 (a.取匹配数量 (), i)
max = 取整 ( (a.取匹配数量 () - i + 1) ÷ 2)
如果真 (max = 0)
跳出循环 ()
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环首 (max > i)
tmw = 取文字部分 (box, i, max)
如果真 (bool ≠ -1 tmw ≠ “”)
加入成员 (tmp, tmw)
加入成员 (len, 取文本长度 (tmw))
max = max - 1
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环尾 ()
计次循环尾 ()
冒泡排序_主次 (tmp, len)
判断 (取数组成员数 (tmp) = 1)
加入成员 (arr, tmp [1])
判断 (取数组成员数 (tmp) ≥ 1)
加入成员 (arr, tmp [1])
tmw = 子文本替换 (text, tmp [1], “”, , , )
变量循环首 (2, 取数组成员数 (tmp), 1, i)
如果真 (文本_取出现次数 (tmw, tmp [i], ) ≥ 2)
加入成员 (arr, tmp [i])
tmw = 子文本替换 (tmw, tmp [i], “”, , , )

变量循环尾 ()



子程序名返回值类型公开备 注
取出重复部分2 
参数名类 型参考可空数组备 注
text文本型
arr文本型
变量名类 型静态数组备 注
a正则表达式类 
i整数型 
max整数型 
box文本型0
bool整数型 
tmw文本型 
tmp文本型0
len整数型0
j整数型 
flag逻辑型 
a.创建 (“\S”, text, , , , )
计次循环首 (a.取匹配数量 (), i)
加入成员 (box, a.取匹配文本 (i, ))
计次循环尾 ()
计次循环首 (a.取匹配数量 (), i)
max = 取整 ( (a.取匹配数量 () - i + 1) ÷ 2)
如果真 (max = 0)
跳出循环 ()
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环首 (max > i)
tmw = 取文字部分 (box, i, max)
如果真 (bool ≠ -1 tmw ≠ “”)
加入成员 (tmp, tmw)
加入成员 (len, 取文本长度 (tmw))
max = max - 1
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环尾 ()
计次循环尾 ()
冒泡排序_主次 (tmp, len)
判断 (取数组成员数 (tmp) = 1)
加入成员 (arr, tmp [1])
判断 (取数组成员数 (tmp) ≥ 1)
加入成员 (arr, tmp [1])
变量循环首 (2, 取数组成员数 (tmp), 1, i)
flag = 假
变量循环首 (1, i - 1, 1, j)
如果真 (寻找文本 (tmp [j], tmp [i], , ) = -1)
flag = 真
跳出循环 ()

变量循环尾 ()
如果真 (flag = )
加入成员 (arr, tmp [i])

变量循环尾 ()



子程序名返回值类型公开备 注
取出任意重复部分 
参数名类 型参考可空数组备 注
text文本型
arr文本型
变量名类 型静态数组备 注
a正则表达式类 
i整数型 
max整数型 
box文本型0
bool整数型 
tmw文本型 
tmp文本型0
len整数型0
a.创建 (“\S”, text, , , , )
计次循环首 (a.取匹配数量 (), i)
加入成员 (box, a.取匹配文本 (i, ))
计次循环尾 ()
计次循环首 (a.取匹配数量 (), i)
max = 取整 ( (a.取匹配数量 () - i + 1) ÷ 2)
如果真 (max = 0)
跳出循环 ()
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环首 (max > i)
tmw = 取文字部分 (box, i, max)
如果真 (bool ≠ -1 tmw ≠ “”)
加入成员 (arr, tmw)

max = max - 1
bool = 寻找文本 (取文字部分 (box, max + 1, a.取匹配数量 ()), 取文字部分 (box, i, max), , )
判断循环尾 ()
计次循环尾 ()
子程序名返回值类型公开备 注
冒泡排序_主次 降序
参数名类 型参考可空数组备 注
name文本型
value整数型
变量名类 型静态数组备 注
i整数型 
j整数型 
temp整数型 
tempw文本型 
计次循环首 (取数组成员数 (value), i)
计次循环首 (取数组成员数 (value) - i, j)
如果真 (value [j] < value [j + 1])
temp = value [j]
value [j] = value [j + 1]
value [j + 1] = temp
tempw = name [j]
name [j] = name [j + 1]
name [j + 1] = tempw

计次循环尾 ()
计次循环尾 ()
子程序名返回值类型公开备 注
取文字部分文本型 
参数名类 型参考可空数组备 注
文本文本型
开始位置整数型
结束位置整数型
变量名类 型静态数组备 注
i整数型 
tmp文本型 
如果真 (开始位置 = 0 结束位置 = 0)
返回 (“”)

如果真 (结束位置 > 取数组成员数 (文本) 开始位置 > 取数组成员数 (文本))
返回 (“”)

变量循环首 (开始位置, 结束位置, 1, i)
tmp = tmp + 文本 [i]
变量循环尾 ()
返回 (tmp)


补充内容 (2021-8-21 22:07):
最长公共子串有问题,修复的代码在20楼

评分

参与人数 2好评 +1 精币 +3 收起 理由
ghost12 + 1 支持开源~!感谢分享
冰点 + 1 + 2 感谢分享,很给力!~

查看全部评分


结帖率:100% (47/47)

签到天数: 20 天

 楼主| 发表于 2021-8-21 22:07:02 | 显示全部楼层   广东省东莞市
.版本 2
.支持库 spec

.子程序 取出最长公共子串, 文本型, 公开, 动态规划
.参数 text1, 文本型
.参数 text2, 文本型
.局部变量 a, 正则表达式类
.局部变量 aa, 正则表达式类
.局部变量 str, 整数型, , "1,1"
.局部变量 i, 整数型
.局部变量 ii, 整数型
.局部变量 maxv, 整数型
.局部变量 xmax, 整数型
.局部变量 tmp, 文本型

.如果真 (取文本长度 (text1) = 0 或 取文本长度 (text2) = 0)
    返回 (“”)
.如果真结束
.如果真 (取文本长度 (text1) = 取文本长度 (text2))
    .如果真 (text1 = text2)
        返回 (text1)
    .如果真结束

.如果真结束
a.创建 (“\S”, text1, , , , )
aa.创建 (“\S”, text2, , , , )

重定义数组 (str, 假, a.取匹配数量 () + 1, aa.取匹配数量 () + 1)

.计次循环首 (a.取匹配数量 (), i)
    .计次循环首 (aa.取匹配数量 (), ii)
        .如果真 (a.取匹配文本 (i, ) = aa.取匹配文本 (ii, ))
            str [i] [ii] = str [i - 1] [ii - 1] + 1
            .如果真 (maxv < str [i] [ii])
                maxv = str [i] [ii]
                xmax = i
            .如果真结束

        .如果真结束

    .计次循环尾 ()
.计次循环尾 ()
调试输出 (maxv, xmax)
.如果 (取文本长度 (文本区分_只取汉字 (text1, 真, 真)) > 0)
    .变量循环首 (xmax - maxv + 1, xmax, 1, i)
        tmp = tmp + a.取匹配文本 (i, )
    .变量循环尾 ()
.否则
    tmp = 取文本中间 (text1, xmax - maxv, maxv)
.如果结束

返回 (tmp)
回复 支持 反对

使用道具 举报

结帖率:70% (14/20)

签到天数: 17 天

发表于 2022-10-16 00:33:41 | 显示全部楼层   河南省郑州市
本帖最后由 qck易语言 于 2022-10-16 00:38 编辑
l1299587332 发表于 2021-8-21 22:07
.版本 2
.支持库 spec

这应该还是改错了吧
数组下标不能为0


回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-4-24 08:03:22 | 显示全部楼层   上海市上海市
共同努力,共同进步
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-4-19 01:02:23 | 显示全部楼层   上海市上海市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-1-29 14:01:03 | 显示全部楼层   上海市上海市
先点评加好评再送精币的说
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2021-8-28 00:04:29 | 显示全部楼层   四川省成都市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 19 天

发表于 2021-8-23 11:52:14 | 显示全部楼层   湖北省十堰市
可以借鉴............
回复 支持 反对

使用道具 举报

结帖率:100% (27/27)

签到天数: 3 天

发表于 2021-8-21 12:56:56 | 显示全部楼层   浙江省宁波市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

发表于 2021-8-21 12:51:22 | 显示全部楼层   山东省德州市
饿啊fee艾法尔法尔飞啊飞啊飞啊发
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表