Strcmp vergleicht nicht?

01/30/2014 14:00 Belur#1
Hey,

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 *temp;
  if (
== NULL)
    return;
  if (
k->links != NULL)
    
inorder (k->links);
  
printf ("%s\n"k->wert);
  if (
k->rechts != NULL)
    
inorder (k->rechts);
}

void einfuegen(knoten *tempchar *data){
knoten *akt temp;

if(
strcmp(akt->wertdata)==1){
    if(
akt->links==NULL){
    
akt->links=wort_neu(data);
}else{
    
einfuegen(akt->linksdata);
}

}
if(
strcmp(akt->wertdata)==-1){
    if(
akt->rechts==NULL){
        
akt->rechts=wort_neu(data);
    }else{
     
einfuegen(akt->rechtsdata);
    }
}
}
int main(int argcchar **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(
1sizeof(worte) / sizeof(char*); i++) {
    
einfuegen(wurzelworte[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->wertdata)==1){ 
und
PHP Code:
(strcmp(akt->wertdata)==-1
Keine von beiden Bedingungen stimmt aber. Obwohl die erste stimmen müsste, da "now" ja größer ist als "is".

Das geht dann so weiter. Fast keine Strings werden richtig verglichen.
Vllt kann mir da jmd helfen.

Grüße

Niklas
01/30/2014 14:25 Padmak#2
Die Bedingungen stimmen tatsächlich nicht, du musst (glaube ich) mit >= bzw <= überprüfen, die Differenz kann auch größer als |1| sein

Padmak
01/30/2014 14:59 Belur#3
Tatsache stimmt.

Auf [Only registered and activated users can see links. Click Here To Register...] war das wohl falsch angegeben.

Läuft jetzt danke:)