Ich würde damit anfangen die Bedingug klar zu definieren und Testfälle aufzustellen.
Ist die Bedingung unvollständig oder falsch, kann auch das Ergebnis nicht in jedem Fall richtig sein.
Bedingung:
Im Text tritt diese Zeichenfolge auf:
[Buchstabe oder Ziffer][Hochkomma][beliebige Anzahl Leerzeichen(oder kein Leerzeichen)][Buchtstabe oder Ziffer]
Wenn Bedingung zutrifft, ersetze das Hochkomma durch zwei Hochkomma.
Die Bedingung kann an mehreren Stellen im Text auftreten.
Delphi-Quellcode:
uses
StrUtils, WideStrUtils;
function IsBuchstabeOderZiffer(AValue: Char): Boolean;
begin
Result := CharInSet(AValue, ['a'..'z', 'A'..'Z', '0'..'9']) or
InOpArray(AValue, ['ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü']);
end;
function HochkommaErgaenzen(const AValue: string): string;
const
HOCHKOMMA = '''';
SPACE = ' ';
var
n1, n2, n3: Integer;
c: Char;
begin
Result := '';
for n1 := 1 to Length(AValue) do
begin
c := AValue[n1];
Result := Result + c;
if IsBuchstabeOderZiffer(c) then
begin
{Hochkomma nach Buchstabe?}
n2 := n1 + 1;
if n2 <= Length(AValue) then
begin
c := AValue[n2];
if c = HOCHKOMMA then
begin
{Leerzeichen nach Hochkomma überspringen}
n3 := n2;
repeat
n3 := n3 + 1;
if n3 <= Length(AValue) then
c := AValue[n3]
else
c := #0;
until c <> SPACE;
{Buchstabe folgt Hochkomma (eventuelle nach Leerzeichen)}
if IsBuchstabeOderZiffer(c) then
Result := Result + HOCHKOMMA;
end;
end;
end;
end;
end;