// Hiermit kann man Silben von (deutschen) Texten zählen lassen. Dabei wird
// beispielsweise bei "Eiapopeia" die Zahl 5 zurückgegeben
(Ei-a-po-pei-a),
// bei "Präambel" die Zahl 3 und bei Wörtern wie "Mamaaaaaaaaaaaaa" die Zahl 2.
// Allerdings sei nicht verschwiegen, dass es bei Wortkonstruktionen wie z.B.
// "beinhalten"
(sprich be-inhalten) zu Zählfehlern kommt, denn der Einfachheit
// halber sieht das Programm solche Dinge wie "ei", "au", "ai", "eu", "äu", "ie",
// "oi", "ae", "oe" oder "ue" jeweils als eine einzige Silbe an und erforscht nicht,
// ob es sich phonetisch um zwei Silben handeln könnte.


// Getestet mit D4 unter WinME
 

function silbenzahl(s: string): longword; 
const 
  i = ['i', 'e', 'u']; 
  a = ['a', 'o', 'ä', 'ö', 'ü'] + i; 
var 
  x: integer; 
  isina: boolean; 
  mehrvokale: byte; 
  c: char; 
  procedure grundstellung; 
  begin 
    c := #0; 
    isina := false; 
    mehrvokale := 0; 
  end; 
begin 
  result := 0; 
  grundstellung; 
  s := ansilowercase(s); 
  for x := 1 to length(s) do begin 
    if (s[x] in a) then begin 
      if ((not isina) or (mehrvokale <> 1) or (not (s[x] in i))) 
        and (s[x] <> c) then inc(result); 
      if (mehrvokale > 0) and (c <> s[x]) then mehrvokale := 0 
      else inc(mehrvokale); 
      isina := true; 
      c := s[x]; 
    end else grundstellung; 
  end; 
end;


// Beispielaufruf 
procedure TForm1.Button3Click(Sender: TObject);
begin
showmessage(inttostr(silbenzahl('Eiei Herr Mayer, da sag ich doch "aua" oder "pfui".')));
end;

Zugriffe seit 6.9.2001 auf Delphi-Ecke