Seite 1 von 2
Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 7:20 pm
von cloidnerux
Ich habe folgendes Problem:
Ich muss in einer Struktur folgender Form:
Jezt muss ich dort überprüfen ob auf Feld a[1] und a[0] und weiteren gleichzeitig bestimmte Zeichen gesetz sind.
Da mir das zu umständlich ist, habe ich folgendes vor:
Ich speicher in einem Anderen struct selben typs die entsprechnden Zeichen an entsprechender Position und vergleiche dann beide structs.
Also meine Frage: Ist das möglich? und ist es überhaupt sinnvoll? wenn nihct, was ist besser?
THX im vorraus.
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 7:42 pm
von Dirty Oerti
Hm, da gibt es viele Wege zum Ziel.
Im Endeffekt musst du aber den Inhalt vom Struct und damit von allen Arrays etc dadrinnen miteinander vergleichen.
Das kannst du z.B. mit einer Funktion machen.
Ein Beispiel dazu findest du hier:
http://www.hs-augsburg.de/~sandman/c_vo ... 17_004.htm
Du kannst natürlich auch das struct...auf andere Weise vergleichen (auch in einer Funktion):
Code: Alles auswählen
typedef struct _something { ... }Str;
Str eins;
eins->wert=5;
Str zwei;
zwei->wert=5;
char compare (Str* eins, Str* zwei) {
int size = sizeof(Str);
char *point1 = (char*) eins;
char *point2 = (char*) zwei;
while (size > 0) {
if ( (*point1) == (*point2) ) {
return 1;
}
size--;
point1++;
point2++;
}
return 0;
}
So dürfte es eigntl auch gehen.
Du vergleichst praktisch die Speicherplätze, in denen die structs liegen.
Das kommt zwar gleich mit einem Vergleich der einzelnen Variablen im Struct, ist aber leichter/schneller auf andere structs anzupassen.
Garantieren, dass das funktioniert (so wie's oben steht) kann ich dir aber nicht^^
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 7:47 pm
von cloidnerux
OK, aber ein Direkter Vergleich durch "==" geht nicht?
Oder ich packs in eine klasse und überlade den Operator "==".
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 7:54 pm
von Dirty Oerti
cloidnerux hat geschrieben:OK, aber ein Direkter Vergleich durch "==" geht nicht?
Oder ich packs in eine klasse und überlade den Operator "==".
Ein direkter Vergleich geht glaube ich nicht.
In eine Klasse packen und den Operator überladen kannst du natürlich auch.
Wobei es aufs gleiche rauskommt wie eine Funktion zu schreiben

Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 8:07 pm
von cloidnerux
Code: Alles auswählen
while (size > 0) {
if ( (*point1) == (*point2) ) {
return 1;
}
Würde das return 1 nicht sofort die Schleife killen und somit was verfälschen, denn wenn das erste Element übereinstimmt, aber der Rest nicht, würden sich doch BUG einschleichen?
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 8:44 pm
von cloidnerux
Hab jezt in einem Buch was gefunden:
Byteweiser vergleich ist faktisch unmöglich:
Beim erstellen eines Strukts werden alle Elemente
nicht zwangsläufig hintereinander gesperichert, sondern es werden Lücken eingebaut.
Wenn man jezt Byteweise vergleich durchführt, kommt das Problem, das man diese Lücken Einließt und die sihc Unterschiedn können => BUG.
Also muss man alle Elemente einzel Überprüfen *g*
Naja, werd wohl nihct drumrum kommen.
Danke für Hilfe.
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 8:46 pm
von Dirty Oerti
hupps, da lief was falsch

Aber die Idee hast du, denke ich.
Code: Alles auswählen
char compare (Str* eins, Str* zwei) {
int size = sizeof(Str);
char *point1 = (char*) eins;
char *point2 = (char*) zwei;
while (size > 0) {
if ( (*point1) != (*point2) ) {
return 0;
}
size--;
point1++;
point2++;
}
return 1;
}
Jetzt aber^^
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 8:48 pm
von Dirty Oerti
cloidnerux hat geschrieben:Hab jezt in einem Buch was gefunden:
Byteweiser vergleich ist faktisch unmöglich:
Beim erstellen eines Strukts werden alle Elemente
nicht zwangsläufig hintereinander gesperichert, sondern es werden Lücken eingebaut.
Wenn man jezt Byteweise vergleich durchführt, kommt das Problem, das man diese Lücken Einließt und die sihc Unterschiedn können => BUG.
Also muss man alle Elemente einzel Überprüfen *g*
Naja, werd wohl nihct drumrum kommen.
Danke für Hilfe.
Nicht unbedingt:
Code: Alles auswählen
struct dings {
unsigned int blub;
unsigned int katatatat;
unsigned int prarama;
} __attribute__((packed));
Und schon kannst du es Byteweise vergleichen, solange du darin nicht mit weiteren Pointern/Strukturen arbeitest.
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 9:09 pm
von cloidnerux
Ja, aber jeder Compiler ahndahbt alles anderst.
Auch wenn du das Attribute sezt, ist keien AGrantie gegeben.
Und PLatformunabhänigkeit ist auhc nihct so ganz gewärleistet.
Naja, hab ne Lösung.
Re: Strukturen Vergleichen
Verfasst: Mi Jan 21, 2009 9:19 pm
von Dirty Oerti
cloidnerux hat geschrieben:Und PLatformunabhänigkeit ist auhc nihct so ganz gewärleistet.
Wenn du den Code mit dem gleichen Compiler für unterschiedliche Plattformen kompilierst schon
