如何找到一篇文章中重复的字符串?
比如说一篇中文章(纯文本文件),(可能某些字符串之间以“回车”“换行”符分隔,也可能整篇文章都没有“回车”“换行”符),现定义一个长度为N的字符串,如何找出整个文章(文件)中长度为N的字符串的重复次数并删除长度为N的第一次出现以后的重复字符串?
比如说N=4时,在下文中,“获得股票”多次重复出现了多次,如何在一个可能长约几十万字的文章中找出多次出现的长度为N的字符串?
-----------------------------------------------------
什么是股票?股票是一种由股份有限公司签发的用以证明股东所持股份的凭证,它表明股票的持有者对股份公司的部分资本拥有所有权。由于股票包含有经济利益,且可以上市流通转让,股票也有一种有价证券。
股票的用途有三点。其一是作为一种出资证明,当一个自然人或法人向股份有限公司参股投资时,便可获得股票作为出资的凭据;其二是股票的持有者可凭借股票来证明自己的股东身份,参加股份公司的股东大会,对股份公司的经营发表意见;其三是股票持有人凭借着股票可获得一定的经济利益,参加股份公司的利润分配,也就是通常所说的分红。
在现实的经济活动中,人们获取股票通常有四种途径。其一是作为股份有限公司的发起人而获得股票,如我国许多上市公司都由国有独资企业转为股份制企业,原企业的部分财产就转为股份公司的股本,相应地原有企业就成为股份公司的发起人股东。其二是在股份有限公司向社会募集资金而发行股票时,自然人或法人出资购买的股票,这种股票通常被称为原始股。其三是在二级流通市场上通过出资的方式受让他人手中持有的股票,这种股票一般称为二手股票,这种形式也是我国股民获取股票的最普遍形式。其四是他人赠与或依法继承而获得股票。
------------------------------------------------------
[解决办法]
思路:
每次取两行出来,把其中的回车换行符找到,记下位置,然后删除。然后在得到的字符串里搜索替换要找的字符串,找完之后把回车换行符再插回去。
然后下移一行,重复以上操作,直到文本末尾。
[解决办法]
将数据加载到数组中,做循环判断判断
[解决办法]
不明白你说的长度有什么用。
如果是单纯统计子字符串重复出现的次数,用正则最简单,效率还可以。
如果想替换,可以使用instr循环查找,对第一次结果忽略,只替换后面出现的,只不过要注意循环的上限,因为替换值与子字符串长度不一样时,上限为变量值。
如果要考虑效率,VB的instr速度是最快的,其次是strstrA和strstrW,再次是正则,最差是自己写代码(毕竟VB没有指针,安全数组寻址时计算太多)。
[解决办法]
几十万汉字一次性读入到内存没多大问题吧?好象记得即使100万也不占多大内存....
然后用简单的方法(不是高效的方法):
msgbox ubound(split(replace(sFile,vbclf,vbnullstring),"获得股票"))
就是先替换掉所有回车符,再处理,可能也不慢....
高效的方法当然是instr,现在手边没有VB,楼主可以测试一下....
[解决办法]
最关键的一点楼上各位都忽略了,“获得股票”本身也可能包含换行符和回车符
[解决办法]
没明白你说什么.....
1:程序能自身判断[问题]是一个词语吗?好像没有这么智能
[解决办法]
杀毒软件的扫描方式,你可以试试这种方式
[解决办法]
看到你这个想起冒泡排序
1:先取样本mid(str,i,N)'截取长度,如果N=1,就直接遍历键盘上可能出现的字符
2:然后再遍历整个长度,或者,直接replace后面的东西,不管他是否有,
[解决办法]
先取前4个字母的子串,然后从第5位每4位
你这个方法不行,如果是
123456789A2345A6789
你的这个方法,有点像360的流氓行为
[解决办法]
2345被你截断了
[解决办法]
多线程,,,,,,,,,,,,,,,啊啊啊啊啊 啊啊啊啊 啊
一次取N个字符,就开个N个线程,查出有重复的.最后汇总,替换有存在的
[解决办法]
除了关注,我只能关注
[解决办法]
[code=VB]Private Sub Form_Load() Dim reg As Object, matchs As Object Dim i%, j% Set reg = CreateObject("vbscript.regexp") reg.ignorecase = True reg.Global = True reg.MultiLine = True reg.Pattern = "(?:(.{4}).+?\1)" Set matchs = reg.Execute("123456781234gabcdg1234g45h6hrabcdhn1234kytknnihao,nihao,nihaoaaa") For i = 0 To matchs.Count - 1 If matchs(i).SubMatches.Count > 0 Then Debug.Print matchs(i).SubMatches(0) End If NextEnd Sub'===================='1234'abcd'niha
[解决办法]
String 数据类型
字符串有两种:变长与定长的字符串。
变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。
==========msdn
哈哈不用担心了
[解决办法]
'靠,搞得那么变态的~~~~,~~~~'不过还是很容易解决的。呵呵。'--------------------------------------------'),(可能某些字符串之间以“回车”“换行”符分隔,也可能整篇文章都没有“回车”“换行”符),'--------------------------------------------'' 先问问再回答。字符包括空格嘛?不包括空格就简单,包括的话累死你~~~~~~~~~~
[解决办法]
其实 split 也能做到
不过我想,自己用循环优化的话,速度可能更为理想一点
要多用一些算法之类的, 通常这种东西都是很耗时的,能避免尽量避免
比如只计算屏幕上要显示会马上就需要处理的部分,剩余的部分需要时再做,这样效果会更好
[解决办法]
规则不明确!
比如 12341123452345
位置 123456789ABCDE
按照单词 1234,第 5-9 字符的 1234 作为第二组应该删除删除,
可是按照单词 2345, 第 5-A 字符的 2345 作为第一组应该保留。
[解决办法]
更正:
第 6-9 字符的 1234
第 7-A 字符的 2345