2017-10-25 18 views
0

Wie bekomme ich den String-Wert von der strtok Zeiger und fügen Sie es in einem Baum? Hier ist der Eingang und Dividierteil:Wie bekomme ich den String-Wert von einem Zeiger

printf("\nDigite a frase: "); 
fgets(frase,TAM,stdin); 

val=strtok(frase,"(),.-;"); 
while(val!=NULL){  
    inserir(&raiz,val); 
    val = strtok (NULL, "(),.-;"); 
} 

Und hier ist die Einfügung in den Baum:

void inserir(no **arvore, char val[]){ 
    no *temp = NULL; 
    if(!(*arvore)) 
    { 
     temp = (no *)malloc(sizeof(no)); 
     temp->esq = temp->dir = NULL; 
     temp->dado = val; 
     temp->freq=1; 
     *arvore = temp; 
     return; 
    } 

    if(val < (*arvore)->dado) 
    { 
     inserir(&(*arvore)->esq, val); 
    } 
    else if(val > (*arvore)->dado) 
    { 
     inserir(&(*arvore)->dir, val); 
    } 
    else if(val==(*arvore)->dado){ 
     (*arvore)->freq++; 
    } 

} 

ich den Einführungsteil benötigen Sie den Wert der Zeichenfolge zu vergleichen, aber es ist zu vergleichen den Wert der Zeiger.

+2

Ich glaube, Sie wollen strcmp verwenden – gbtimmon

+0

Sie müssen eine Kopie der Zeichenfolge machen, wenn Sie es einfügen. Verwenden Sie 'strdup()' vielleicht, obwohl es POSIX anstatt Standard C ist. –

+0

'strdup()' wird fast sicher dort sein. Wenn nicht, können Sie 'char * newStr = malloc (strlen (oldStr) + 1); strcpy (newStr, oldStr); ' – JeremyP

Antwort

1

Vielen Dank @gbtimmon. Ich habe die vergleichen Methode:

int comp=strcmp(val, (*arvore)->dado); 

if(comp<0) 
{ 
    inserir(&(*arvore)->esq, val); 
} 
else if(comp>0) 
{ 
    inserir(&(*arvore)->dir, val); 
} 
else if(comp==0){ 
    (*arvore)->freq++; 
} 
Verwandte Themen