Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Elegante Lösung gesucht: String aus Charset aufbauen (https://www.delphipraxis.net/141254-elegante-loesung-gesucht-string-aus-charset-aufbauen.html)

ThE_-_BliZZarD 5. Okt 2009 22:07


Elegante Lösung gesucht: String aus Charset aufbauen
 
Hallihallo,

irgendwie komme ich momentan auf keine elegenate Lösung, ich bitte um Geistesblitze für folgendes Problem:

Ich habe einen Integer (kann nur >= 0 sein), und aus diesem heraus will ich einen String aufbauen, und das aus einem gegebenen Charset.

Code:
// Pseudo code...
List <Char> Charset = { a, b, c, d, e, f};
int charCount = Charset.length();

function getNext(unsigned int nextID) {

   // hier irgendwie errechnen.. mit modulo etc pp..
   // rauskommen soll z.B.:
   // bei nextID = 0 -> "a"
   // bei nextID = 7 -> "ab"
   // hoffe das ist verständlich genug :gruebel:

}
Sorry das der Code pseudo ist, da ich die mathematische bzw. elegante Lösung suche, ist die Sprache der Lösung eigl. egal. Außer Brainfuck :wink:

Dax 5. Okt 2009 22:14

Re: Elegante Lösung gesucht: String aus Charset aufbauen
 
Interpretiere die ID einfach als Zahldarstellung deines Strings zur Basis (Mächtigkeit des Charsets). Dann ist das letzte Zeichen Chars[ID mod Len], das vorletzte ist Chars[(ID div Len) mod Len] und so weiter.

ThE_-_BliZZarD 7. Okt 2009 09:59

Re: Elegante Lösung gesucht: String aus Charset aufbauen
 
Vielen Dank schon mal an Dax :)

Das hat mich schon um einiges weiter gebracht, zusätzlich kann ich diesen Link empfehlen:
Umrechnung von Zahlensystemen

Jetzt habe ich allerdings ein kleines Problem beim Mapping des Charsets gegen die Zahl - die Null ist ein Problem.

Code:
0 => 0  => a
1 => 1  => b
2 => 2  => c
3 => 3  => d
4 => 4  => e
5 => 5  => f
6 => 10 => aa
7 => 11 => ab
8 => 12 => ac
Am obigen Beispiel sieht man bei "0 => 0 => a" in Zusammenhang mit "6 => 10 => aa", das 0 nicht einfach auf a und 1 auf b gemappt werden kann..

Als mögliche Lösung könnte man die Null einfach weglassen:

Code:
1  => 1  => a
2  => 2  => b
3  => 3  => c
4  => 4  => d
5  => 5  => e
6  => 6  => f
7  => 11 => aa
8  => 12 => ab
9  => 13 => ac
10 => 14 => ad
Das funktioniert zwar tadellos, lässt die Null aber als undefinied zurück :(

Bin für jeden Tipp dankbar :)

p80286 7. Okt 2009 11:00

Re: Elegante Lösung gesucht: String aus Charset aufbauen
 
Wie wär es denn mit
Code:
0 => 0  => a
1 => 1  => b
2 => 2  => c
3 => 3  => d
4 => 4  => e
5 => 5  => f
6 => 10 => ba
7 => 11 => bb
8 => 12 => bc
(So einfach etwas weglassen ist wohl nur in der politik erlaubt)

Gruß
K-H

leddl 7. Okt 2009 11:11

Re: Elegante Lösung gesucht: String aus Charset aufbauen
 
Wie wäre es, wenn du beim Umrechnen 1 addierst, dann beim Zugriff auf dein Charset aber wieder den jeweiligen Index um 1 verminderst?
Code:
0 => 0 => 0+1 = 1 => 0 => a
1 => 1 => 1+1 = 2 => 1 => b
2 => 2 => 2+1 = 3 => 2 => c
3 => 3 => 3+1 = 4 => 3 => d
4 => 4 => 4+1 = 5 => 4 => e
5 => 5 => 5+1 = 6 => 5 => f
6 => 10 => 10+1 = 11 => 00 => aa
7 => 11 => 11+1 = 12 => 01 => ab
8 => 12 => 12+1 = 13 => 02 => ac
Ist nur ein Workaround, dürfte aber das liefern, was du möchtest.

Dax 7. Okt 2009 12:41

Re: Elegante Lösung gesucht: String aus Charset aufbauen
 
Schlechte Idee ;) Die 0 repräsentiert ein neutrales Element (der Addition, also bei uns konzeptionsmässig Stringverkettung), deshalb sollte 0 den leeren String repräsentieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz