program StringVorkommen;
{$APPTYPE CONSOLE}
{.$R *.res}
uses
Winapi.Windows,
System.SysUtils, System.Character;
type
// proto-array für gültige ascii codes
TAsciiArray =
Array[32..127]
of Integer;
// methode die wiedergibt ob die eingabe ein vokal ist
function IsVokal(
const AChar: Char): Boolean;
inline;
var
LChar: Char;
begin
LChar := ToLower(AChar);
Result := (LChar = '
a')
or (LChar = '
e')
or (LChar = '
i')
or (LChar = '
o')
or (LChar = '
u');
end;
// methode die wiedergibt ob die eingabe eine konstante ist
function IsKonstante(
const AChar: Char): Boolean;
inline;
var
LChar: Char;
begin
LChar := ToLower(AChar);
Result := (LChar = '
b')
or (LChar = '
c')
or (LChar = '
d')
or (LChar = '
f')
or (LChar = '
g')
or (LChar = '
h')
or (LChar = '
j')
or (LChar = '
k')
or (LChar = '
l')
or (LChar = '
m')
or (LChar = '
n')
or (LChar = '
p')
or (LChar = '
q')
or (LChar = '
r')
or (LChar = '
s')
or (LChar = '
t')
or (LChar = '
v')
or (LChar = '
w')
or (LChar = '
x')
or (LChar = '
y')
or (LChar = '
z');
end;
// methode die wiedergibt ob die eingabe ein umlaut ist
// momentan kann diese nicht über das array arbeiten
// da umlaute außerhalb der ascii zeichen 32-127 sind
function IsUmlaut(
const AChar: Char): Boolean;
inline;
var
LChar: Char;
begin
LChar := ToLower(AChar);
Result := (LChar = '
ä')
or (LChar = '
ö')
or (LChar = '
ü');
end;
// methode zum füllen des arrays
function FillArray(
const AString:
string): TAsciiArray;
inline;
var
i: Integer;
Index: Integer;
begin
FillChar(Result, SizeOf(Result), $0);
for i := 1
to Length(AString)
do
begin
Index := Ord(AString[i]);
if ((
Index >= Low(Result))
and (
Index <= High(Result)))
then
Result[
Index] := Result[
Index] + 1;
end;
end;
// methode für die ausgabe des arrays
procedure PrintArray(
const AAsciiArray: TAsciiArray);
var
i: Integer;
LChar: Char;
begin
for i := Low(AAsciiArray)
to High(AAsciiArray)
do
if AAsciiArray[i] > 0
then
begin
LChar := Char(i);
Writeln(Format('
Das Zeichen "%s" kam %d mal vor.', [LChar, AAsciiArray[i]]));
if IsVokal(LChar)
then
Writeln('
Das Zeichen ist ein Vokal.');
if IsKonstante(LChar)
then
Writeln('
Das Zeichen ist eine Konstante.');
end;
end;
// methode um die console zu leeren
procedure ClrScr;
var
tc: TCoord;
nw: DWORD;
cbi: TConsoleScreenBufferInfo;
HConsoleOutput: THandle;
TextAttr: Word;
begin
HConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(HConsoleOutput, cbi);
TextAttr := cbi.wAttributes;
tc.X := 0;
tc.Y := 0;
FillConsoleOutputAttribute(HConsoleOutput, TextAttr, (cbi.dwSize.X * cbi.dwSize.Y), tc, nw);
FillConsoleOutputCharacter(HConsoleOutput, Char('
'), (cbi.dwSize.X * cbi.dwSize.Y), tc, nw);
SetConsoleCursorPosition(HConsoleOutput, tc);
end;
// hier beginnt der ausführungscode
var
Input:
string;
AsciiArray: TAsciiArray;
checker: Boolean;
begin
try
checker := True;
while checker
do
begin
ClrScr;
Write('
Gebe was ein: ');
Readln(Input);
if Length(Input) > 0
then
begin
AsciiArray := FillArray(Input);
PrintArray(AsciiArray);
Write('
Zum fortfahren bitte Eingabetaste bestätigen.');
Readln;
end
else
begin
Writeln('
Programm beendet.');
checker := False;
end;
end;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
Readln;
end.