Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - set of chars: Bestimmen der Länge der Menge und Auslesen
Frankieboy - Mi 16.06.10 16:01
Titel: set of chars: Bestimmen der Länge der Menge und Auslesen
Hallo,
wieder mal eine grundlegende Frage, zu der ich in der Delphihilfe (da schön geordnet :roll:) nichts finde.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Zeichen: set of chars; begin Zeichen := ['A'..'Z']; end; |
ich benutze eine
Set of chars und weise Ihr danach einige Chars zu (mehr als im Beispiel).
1. Wie bekommt man die Länge einer set (of CHars), also die Menge der Zeichen insgesamt?
2. Wie kann man bestimmte Zeichen, z.B. Zeichen Nr. 5 aus der Menge auslesen?
Vielen Dank schon mal,
Frank
Narses - Mi 16.06.10 16:15
Moin!
Frankieboy hat folgendes geschrieben : |
| 1. Wie bekommt man die Länge einer set (of CHars), also die Menge der Zeichen insgesamt? |
Das ist (AFAIK) nicht möglich (klar: ausser selbst zählen, was in der Menge ist).
| DOH hat folgendes geschrieben: |
Mengenoperatoren
Die folgenden Operatoren haben eine Menge als Operanden.
Mengenoperatoren
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Operator Operation Operandtyp Ergebnistyp Beispiel + Vereinigung Menge Menge Set1 + Set2 - Differenz Menge Menge S - T * Teilmenge Menge Menge S * T <= Teilmenge Menge Boolean Q <= MySet >= Obermenge Menge Boolean S1 >= S2 = Gleich Menge Boolean S2 = MySet <> Ungleich Menge Boolean MySet <> S1 in Element Ordinal, Menge Boolean A in Set1 |
Für +, - und * gelten die folgenden Regeln:
Der Ordinalwert O ist nur in X + Y enthalten, wenn O in X oder Y (oder beiden) enthalten ist. O ist nur in X - Y enthalten, wenn O in X, nicht aber in Y enthalten ist. O ist nur in X *Y enthalten, wenn O sowohl in X als auch in Y enthalten ist.
Das Ergebnis einer Operation mit +, - oder * ist vom Typ set of A..B, wobei A der kleinste und B der größte Ordinalwert in der Ergebnismenge ist.
Für <=, >=, =, <> und in gelten die folgenden Regeln:
X <= Y ist nur dann True, wenn jedes Element von X ein Element von Y ist; Z >= W ist gleichbedeutend mit W <= Z. U = V ist nur dann True, wenn U und V genau dieselben Elemente enthalten. Andernfalls gilt: U <> V is True.
Für einen Ordinalwert O und eine Menge S ist O in S nur dann True, wenn O ein Element von S ist. |
Frankieboy hat folgendes geschrieben : |
| 2. Wie kann man bestimmte Zeichen, z.B. Zeichen Nr. 5 aus der Menge auslesen? |
Die Elemente einer Menge haben keine Ordnung. Ob ein Element in der Menge ist, kann man mit dem in-Operator rausfinden, s.o.
cu
Narses
martin300 - Mi 16.06.10 16:27
Hallo,
zu 1)
siehe:
http://www.delphipraxis.net/551329-post.html
zu 2)
Aus Wikipedia: "Bei der Beschreibung einer Menge geht es ausschließlich um die Frage, welche Elemente in ihr enthalten sind. Es wird nicht danach gefragt, ob ein Element mehrmals enthalten ist, oder ob es eine Reihenfolge unter den Elementen gibt."
und somit macht 1) auch nicht viel Sinn.
Narses - Mi 16.06.10 17:16
Moin!
martin300 hat folgendes geschrieben : |
| und somit macht 1) auch nicht viel Sinn. |
Vor allem werden dort Annahmen über das Speicherabbild einer Menge gemacht und das ist für eine abstrakte Betrachtung des Sprachfeatures absolut tödlich! :|
cu
Narses
jaenicke - Do 17.06.10 08:44
Außerdem bin ich mir nicht sicher ob das wirklich so viel schneller als die triviale Version ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TCharSet = set of Char;
function CountSet(const Value: TCharSet): Integer; var i: Char; begin Result := 0; for i in Value do Inc(Result); end; |
Sinspin - Do 17.06.10 14:03
Das klappt aber nicht mit Delphi7 oder anderen älteren Versionen.
Dort musst du von der maximalen Menge ausgehen also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function CountSet(const Value: TCharSet): integer; var l: integer;
begin Result := 0; for l := 0 to 255 do if Chr(l) in Value then Inc(Result); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!