habe als Übung für die eine Klausur eine Aufgabe gemacht:
Man sollte einen Baum entwerfen der Wörer sortiert:
Hab das zuerst für Zahlen gemacht, das läuft auch gut und jetzt eben für Wörter: Das sieht bei mir so aus:
PHP Code:
/*
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct _knoten
{
struct _knoten *links, *rechts;
char *wert;
}knoten;
knoten *wort_neu(char *data){
knoten *neu = malloc(sizeof(knoten));
neu->wert = data;
neu->links = NULL;
neu->rechts = NULL;
return neu;
}
void inorder(knoten *temp){
knoten *k = temp;
if (k == NULL)
return;
if (k->links != NULL)
inorder (k->links);
printf ("%s\n", k->wert);
if (k->rechts != NULL)
inorder (k->rechts);
}
void einfuegen(knoten *temp, char *data){
knoten *akt = temp;
if(strcmp(akt->wert, data)==1){
if(akt->links==NULL){
akt->links=wort_neu(data);
}else{
einfuegen(akt->links, data);
}
}
if(strcmp(akt->wert, data)==-1){
if(akt->rechts==NULL){
akt->rechts=wort_neu(data);
}else{
einfuegen(akt->rechts, data);
}
}
}
int main(int argc, char **argv) {
char *worte[] = {"now", "is", "the", "time", "for", "all", "good",
"men", "to", "come", "to", "the", "aid", "of",
"their", "party"};
knoten *wurzel = wort_neu(worte[0]);
int i;
for(i = 1; i < sizeof(worte) / sizeof(char*); i++) {
einfuegen(wurzel, worte[i]);
}
inorder(wurzel);
}
Soo. Die Ausgabe ist dann:
men
now
of
Komischerweiße. Ich hab im Debugger gesehen, dass die Wörter nicht richtig verglichen werden mit strcmp also das weder die eine noch die andere If-Bedingung gilt, obwohl das eigentlich der Fall sein sollte. Er überspringt einfach beide.
(Der Fall, dass beide Strings gleich sind ist noch nicht berücksichtigt, aber die Ausgabe müsste ja tdz schon mehere Wörter enthalten).
"now" wird in den Baum aufgenommen.
Dann wird "is" verglichen mit:
PHP Code:
if(strcmp(akt->wert, data)==1){
PHP Code:
(strcmp(akt->wert, data)==-1)
Das geht dann so weiter. Fast keine Strings werden richtig verglichen.
Vllt kann mir da jmd helfen.
Grüße
Niklas






war das wohl falsch angegeben. 