Hmmm... Oder so (einfacher, kann dafür mit beliebigen Zahlensystemen arbeiten)
Delphi-Quellcode:
Const
ccDigits = '
0123456789';
// ccDigits enthält alle 'Ziffern' und kann beliebig erweitert werden
// Für Addition von HEX-Zahlen, setze ccDigits auf '0123456789ABCDEF';
Function AddOne(s:
String):
String;
Var
i: Integer;
cLast,cFirst : Char;
Begin
i := Length(s);
Result := s;
cLast := ccDigits [Length (ccDigits)];
cFirst := ccDigits[1];
While i > 0
Do Begin
If Result[i] <> cLast
Then Begin
Result[i] := ccDigits[1 + Pos (Result[i], ccDigits)];
// nächste 'Ziffer' aus den Digits nehmen
Exit;
End
Else Begin
Result[i] := cFirst;
dec(i);
End;
End;
Raise Exception.Create('
Überlauf');
End;
Code:
AddOne('000') = '001'
AddOne('009') = '010'
AddOne('999') =
Exception 'Überlauf'
Prinzipiell funktioniert es wie ein mechanischer Zähler. Hier wird beim letzten Zeichen begonnen. Ist das Zeichen < als die höchste Ziffer, ersetzen wir es durch die nächste und sind fertig. Ansonsten haben wir einen Übertrag: Wir setzen diese Stelle auf '0' (also auf die kleinste Ziffer), gehen um eine Stelle nach links und wiederholen das Ganze.