文字列内の指定文字数を調べるには?

解決


Delphiひよっこ  2004-03-19 23:26:47  No: 7777  IP: [192.*.*.*]

文字列内の指定文字数を調べる関数をしりませんか?

例えば、文字列'2345841457346'に文字'4'がいくつあるか。

やっぱりループでひとつひとつ調べていくしかないのでしょうか

編集    削除
たかみちえ  URL  2004-03-20 00:05:56  No: 7778  IP: [192.*.*.*]

一文字でしたらそれが楽かと。
# 変数の宣言は省きます。
Result := 0;
len    := Length(AText);
while (i < len) do begin
  if AText[i] = Charactor then Inc(Result);
  Inc(i); 
end;

編集    削除
Delphiひよっこ  2004-03-20 01:22:29  No: 7779  IP: [192.*.*.*]

やっぱりそうですよね

編集    削除
るるとん@K  2004-03-21 17:44:15  No: 7780  IP: [192.*.*.*]

>Result...end;
解決済みですがforでいいのでは?

編集    削除
るるとん@K  2004-03-21 19:05:56  No: 7781  IP: [192.*.*.*]

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が必要です

編集    削除
つっか  2004-03-21 20:40:29  No: 7782  IP: [192.*.*.*]

> こっちの方が速いのでは?

一文字だったら、たかみさんのものの方が圧倒的に速いでしょう。
見つかるたびに、ループ内で文字列をコピーしている時点ではやい
速度は望み薄です。

編集    削除