delphi 如何计算字符串中某个字符出现的次数?

4si2a6ki  于 2022-12-26  发布在  其他
关注(0)|答案(7)|浏览(348)

在 Delphi 中如何计算某个字符在字符串中出现的次数?
例如,假设我有下面的字符串,并希望计算其中逗号的个数:

S := '1,2,3';

然后,我希望获得2作为结果。

50pmv0ei

50pmv0ei1#

您可以使用以下简单函数:

function OccurrencesOfChar(const S: string; const C: char): integer;
var
  i: Integer;
begin
  result := 0;
  for i := 1 to Length(S) do
    if S[i] = C then
      inc(result);
end;
efzxgjgh

efzxgjgh2#

尽管答案已经被接受了,我还是在下面发布了一个更通用的函数,因为我觉得它很优雅。这个解决方案是用来计数字符串而不是字符的出现次数的。

{ Returns a count of the number of occurences of SubText in Text }
function CountOccurences( const SubText: string;
                          const Text: string): Integer;
begin
  Result := Pos(SubText, Text); 
  if Result > 0 then
    Result := (Length(Text) - Length(StringReplace(Text, SubText, '', [rfReplaceAll]))) div  Length(subtext);
end;  { CountOccurences }
zbq4xfa0

zbq4xfa03#

对于那些更喜欢现代 Delphi 版本中的枚举器循环的人(并不比Andreas的解决方案更好,只是一个替代方案):

function OccurrencesOfChar(const ContentString: string;
  const CharToCount: char): integer;
var
  C: Char;
begin
  result := 0;
  for C in ContentString do
    if C = CharToCount then
      Inc(result);
end;
slmsl1lt

slmsl1lt4#

如果您不处理大文本,则可以使用此方法
...

uses RegularExpressions;

...

function CountChar(const s: string; const c: char): integer;
begin
 Result:= TRegEx.Matches(s, c).Count
end;
9bfwbjaz

9bfwbjaz5#

您可以使用StringReplace函数的好处如下:

function OccurencesOfChar(ContentString:string; CharToCount:char):integer;
begin
   Result:= Length(ContentString)-Length(StringReplace(ContentString, CharToCount,'', [rfReplaceAll, rfIgnoreCase]));
end;
drnojrws

drnojrws6#

简单的解决方案和良好的性能(我为 Delphi 7编写,但应该也适用于其他版本):

function CountOccurences(const ASubString: string; const AString: string): Integer;
var
  iOffset: Integer;
  iSubStrLen: Integer;
begin
  Result := 0;

  if (ASubString = '') or (AString = '') then
    Exit;

  iOffset := 1;
  iSubStrLen := Length(ASubString);
  while (True) do
  begin
    iOffset := PosEx(ASubString, AString, iOffset);
    if (iOffset = 0) then
      Break;
    Inc(Result);
    Inc(iOffset, iSubStrLen);
  end;
end;
o4hqfura

o4hqfura7#

嗯......我错过什么了吗?为什么不......

kSepChar:=',';//to count commas
      bLen:=length(sLineToCheck);
      bCount:=0;//The numer of kSepChars seen so far.
      bPosn:=1;//First character in string is at position 1
      for bPosn:=1 to bLen do begin
         if sLineToCheck[bPosn]=kSepChar then inc(bCount);
         end;//

相关问题