2013-07-23 2 views
0

Exemple: "Ceci est un exemple" doit être transformé en "exemple an is This" Un caractère doit être enregistré comme information de chaque nœud. Après cela, je suis en mesure d'inverser de la phrase ENTIRE (c'est-> "elpmaxe na si sihT"). Maintenant, comment puis-je inverser chaque mot pour obtenir: « exemple un est ce »Comment inverser les mots d'une phrase dans une liste chaînée?

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

struct node { 
    struct node *ptr; 
    char info; 
}; 

struct node *first,*ic; 
struct node * insertn(int n,struct node * first) 
{ 

    struct node *temp,*cur; 
    temp=(struct node *)malloc(sizeof(struct node)); 

    temp->info=n; 
    temp->ptr='\0'; 
    if(first=='\0') 
    { 

     return temp; 
    } 
    else{ 
     cur=first; 
     while(cur->ptr!='\0') 
     cur=cur->ptr; 
     cur->ptr=temp; 
     return first; 
    } 
} 
void disp(struct node *first) 
{ 
    printf("here"); 
    struct node *cur; 
    cur=first; 
    while(cur!='\0') 
    { 
     printf("%c",cur->info); 
     cur=cur->ptr; 

    } 
} 
void rev(struct node * p) 
{ 
    if(p->ptr=='\0') 
    { 

     first =p; 
     return; 
    } 

    rev(p->ptr); 

    struct node *q=p->ptr; 
    q->ptr=p; 
    p->ptr='\0'; 
} 

main() 
{ 
    char n; 
    int i=0; 

    first='\0'; 
    ic='\0'; 

    while(i<7) 
    { 

     i++; 
     printf("Enter element:"); 
     scanf("%c",&n); 
     first=insertn(n,first); 
    } 
    printf("ELEMENTS OF LIST BEFORE REV:"); 
    disp(first); 
    rev(first); 

    printf("\n\nELEMENTS OF LIST AFTER REV:"); 
    disp(first); 

} 
+0

Commencez avec le formatage de votre code, car il est mauvais et illisible. –

Répondre

0

Lire chaque mot et l'ajouter comme un tableau de caractères à un nœud. Lisez ensuite votre liste liée de bout en bout. Vous aurez une phrase inversée.

------------------------------- 
+ *prev + "This" + *next + 
------------------------------- 

------------------------ 
+ *prev + "is" + *next + 
------------------------ 

------------------------ 
+ *prev + "an" + *next + 
------------------------ 

----------------------------- 
+ *prev + "example" + *next + 
----------------------------- 

Maintenant lu à partir de la fin en utilisant * prev.

0

Une meilleure façon est de stocker un mot comme information de chaque noeud. Comme ceci:

#define LEN 10 

struct node{ 
    struct node *ptr; 
    char info[LEN+1]; // the length of each word cannot be more than LEN 
}; 

ou

struct node{ 
    struct node *ptr; 
    char *info; 
}; 

Ensuite, vous pouvez utiliser votre fonction rev pour atteindre votre objectif.

Si vous ne souhaitez pas modifier la structure du noeud, vous devez diviser la phrase en mots en fonction de l'espace vide. Vous pouvez d'abord inverser chaque mot, puis inverser la phrase entière.

Comme ceci: « Ceci est un exemple » -> « siht si na elpmaxe » -> « exemple un est ce »