delphi - programacion - ¿Cómo contar el número de ocurrencias de un cierto char en una cadena?
delphi wikipedia (5)
¿Cómo puedo contar el número de apariciones de un determinado personaje en una cadena en Delphi?
Por ejemplo, supongamos que tengo la siguiente cadena y me gustaría contar el número de comas en ella:
S := ''1,2,3'';
Entonces me gustaría obtener 2
como resultado.
A pesar de que ya se aceptó una respuesta, estoy publicando la función más general a continuación porque me parece muy elegante. Esta solución es para contar las ocurrencias de una cadena en lugar de un carácter.
{ 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 }
Este puede hacer el trabajo si no está manejando texto grande
...
uses RegularExpressions;
...
function CountChar(const s: string; const c: char): integer;
begin
Result:= TRegEx.Matches(s, c).Count
end;
Puedes usar esta simple función:
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;
Y para aquellos que prefieren el bucle del enumerador en las versiones modernas de Delphi (ninguna mejor que la solución aceptada por Andreas, solo una solución alternativa):
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;
Puede usar el beneficio de la función StringReplace como:
function OccurencesOfChar(ContentString:string; CharToCount:char):integer;
begin
Result:= Length(ContentString)-Length(StringReplace(ContentString, CharToCount,'''', [rfReplaceAll, rfIgnoreCase]));
end;