Mirror

Counting occurrences in a string (Views: 100)


Problem/Question/Abstract:

A function that returns the number of times a substring occurs in a string. There's also an ANSI version.

Answer:

The following functions return the number of occurrences of a char or a substring within a string or ANSI string:

interface

function Occurs(const str: string; c: char): integer; overload;
function Occurs(const str: string; const substr: string): integer;
overload;
function AnsiOccurs(const str: string; const substr: string): integer;

implementation

uses sysutils;

function Occurs(const str: string; c: char): integer;
// Returns the number of times a character occurs in a string
var
  p: PChar;
begin
  Result := 0;
  p := PChar(Pointer(str));
  while p <> nil do
  begin
    p := StrScan(p, c);
    if p <> nil then
    begin
      inc(Result);
      inc(p);
    end;
  end;
end;

function Occurs(const str: string; const substr: string): integer;
// Returns the number of times a substring occurs in a string
var
  p, q: PChar;
  n: integer;
begin
  Result := 0;
  n := Length(substr);
  if n = 0 then
    exit;
  q := PChar(Pointer(substr));
  p := PChar(Pointer(str));
  while p <> nil do
  begin
    p := StrPos(p, q);
    if p <> nil then
    begin
      inc(Result);
      inc(p, n);
    end;
  end;
end;

function AnsiOccurs(const str: string; const substr: string): integer;
// Returns the number of times a substring occurs in a string
// ANSI version
var
  p, q: PChar;
  n: integer;
begin
  Result := 0;
  n := Length(substr);
  if n = 0 then
    exit;
  q := PChar(Pointer(substr));
  p := PChar(Pointer(str));
  while p <> nil do
  begin
    p := AnsiStrPos(p, q);
    if p <> nil then
    begin
      inc(Result);
      inc(p, n);
    end;
  end;
end;

Copyright (c) 2001 Ernesto De Spirito
Visit: http://www.latiumsoftware.com/delphi-newsletter.php

<< Back to main page