怎样找出字符串S中有多少个字符串ABC?代码如何写? ( 积分: 5 )

  • 主题发起人 主题发起人 坚持信念
  • 开始时间 开始时间

坚持信念

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样找出字符串S中有多少个字符串ABC?代码如何写?
 
怎样找出字符串S中有多少个字符串ABC?代码如何写?
 
用Pos,Copy,再用个while结构肯定写的出来
写的好看的估计3,4行能完成
我估计得写个8,9行,就不丢人了...
 
借这兄弟的贴 问个事 为什么 我发不了贴 系统说 我没有进行帐号确认
 
你声请好了帐号他会给你的邮箱发一个激活码给你的,你按他的提示做就好了
 
#include<stdio.h>
main()
{char a[100];
int i,j,n=1;
for(i=0;i<100;i++)
scanf(&quot;%c&quot;,&amp;a);
for(j=0;j<100;j++)
if(a[j]==A&amp;&amp;a[++j]==B&amp;&amp;a[++a[j++]])
n=++n;
printf(&quot;%d&quot;,n);
}
这是我自己写的程序,可能有一些幼稚,请大家多多指教
 
用正则表达式
 
有个分割函数的;
拿ABC做分隔符,分;
得出的字串数组长 - 1 就是;

快着呢......
 
用正则表达式怎么个写?
 
var
i, len1, len2: Integer;
begin
result := 0;
len1 := length(SubStr);
len2 := length(Source)-len1+1;
i := 1;
while i<=len2 do
if (Source=SubStr[1])
and CompareMem(@(Source), Pointer(SubStr), len1) then
begin
inc(result);
inc(i, len1);
end
else
inc(i);
end;
 
function GetSubStrCount(const SubStr, Source: String): Integer;
var
Count: Integer
S: String;
begin
Count := 0;
S := Source;
while Pos(SubStr, S) > 0 do
begin
Inc(Count);
Delete(...)
//这里是删除S中从开始到SubStr的字符串
end;
Result := Count;
end;
 
给你个函数:
function GetStrCount(s, sSub: string): Integer;
var
sTmp : string;
iLen, iLenSub : Integer;
begin
Result := 0;

iLen := Length(s);
iLenSub := Length(sSub);
if (iLen <= 0) or (iLenSub <= 0) or (iLen < iLenSub) then
Exit;

sTmp := StringReplace(s, sSub, '', [rfReplaceAll, rfIgnoreCase]);

Result := ( iLen - Length(sTmp) ) div iLenSub
end;
 
建议从头往后检索,这样效率应该高些,因为 pos() 的实现也是要一个一个查的

function cs(s:string):integer;
var
i,iLen:integer;
begin
iLen:=Length(s);
bWord:=false;
i:=1;
result:=0;
while i<=iLen do
begin
if iLen - i + 1>=3 then
begin
if Copy(s,i,3)='ABC' then
begin
inc(result);
inc(i,3);
continue;
end;
inc(i);
end;
end
end;

呵呵,我这两天在搞些字符串分析的咚咚,觉得这样会高效些
 
gear1023 给出的函数的想法很好,有点意思!
 
我昨天依照这个想法,实现了简单的分析字符串: 按格式写入字符串到 RichEdit 中
发现分析字符串挺好玩的!

如果你要效率的话,最好少用系统提供给你的那些定位、替换等函数,因为它们本身也是需要遍历字符串的
 
接受答案了.
 
后退
顶部