文字列内の指定文字数を調べる関数をしりませんか?
例えば、文字列'2345841457346'に文字'4'がいくつあるか。
やっぱりループでひとつひとつ調べていくしかないのでしょうか
一文字でしたらそれが楽かと。
# 変数の宣言は省きます。
Result := 0;
len := Length(AText);
while (i < len) do begin
if AText[i] = Charactor then Inc(Result);
Inc(i);
end;
やっぱりそうですよね
編集 削除>Result...end;
解決済みですがforでいいのでは?
WがT内にどれだけあるか
function GetHowMany(W,T:string):integer;
var
p:integer;
begin
result:=0;
p:=AnsiPos(W,T);
while p>0 do
begin
Inc(result);
T:=RightStr(T,(Length(T)-p));
p:=AnsiPos(W,T);
end;
end;
こっちの方が速いのでは?
但し2文字以上の場合重なっていてもカウントされます。
例 GetHowMany('aba','ababa')=2
これはT:=RightStr(T,(Length(T)-p))の第2引数でLength(W)を足すやら引くやらしたらなくなります。
ちなみにStrUtilsが必要です
> こっちの方が速いのでは?
一文字だったら、たかみさんのものの方が圧倒的に速いでしょう。
見つかるたびに、ループ内で文字列をコピーしている時点ではやい
速度は望み薄です。