2013-04-15 5 views
-1

J'essaie d'inverser les lettres pour les mots dans une phrase. J'essaie également de stocker ces mots dans un nouveau tableau char. En ce moment je reçois une erreur d'exécution, que je ne peux pas résoudre pour tous mes réglages. Mon approche est de créer un nouveau tableau de caractères de la même longueur que la phrase. Puis bouclez la phrase jusqu'à ce que j'atteigne un caractère. Puis bouclez en arrière et ajoutez ces caractères à un mot. Puis ajoutez le mot à la nouvelle phrase. Toute aide serait très appréciée.Inverser les mots en langage C

int main(void) { 
    char sentence [] = "this is a sentence"; 
    char *newSentence = malloc(strlen(sentence)+1); 
    int i,j,start; 
    start = 0; 

    for(i = 0; i <= strlen(sentence); i++) 
    { 

     if(sentence[i] == ' ') 
     { 
      char *word = malloc((i - start)+1); 
      for(j = sentence[i]; j >= start; j--) 
      { 
       word[j] = sentence[j]; 
      } 
      strcat(newSentence,word); 
      start =sentence[i +1]; 
     } 
    } 
    printf("%s",newSentence); 
    return 0; 
} 
+0

quel est votre erreur? –

+0

vous n'avez pas terminé le mot – pm100

+0

@pm 100, Pouvez-vous expliquer ce que vous voulez dire? – Calgar99

Répondre

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

int main(void) { 
    char sentence [] = "this is a sentence"; 
    char *newSentence; 
    int i,j,start, len; 
    start = 0; 
    len = strlen(sentence); 
    newSentence = malloc(len+1); 
    *newSentence = '\0'; 

    for(i = 0; i <= len; i++) 
    { 
     if(sentence[i] == ' ' || sentence[i] == '\0') 
     { 
      char *word = malloc((i - start)+1); 
      int c = 0; 
      for(j = i - 1; j >= start; j--) 
      { 
       word[c++] = sentence[j]; 
      } 
      word[c]='\0'; 
      strcat(newSentence,word); 
      if(sentence[i] == ' ') 
       strcat(newSentence," "); 
      start = i + 1; 
      free(word); 
     } 
    } 
    printf("%s",newSentence); 
    return 0; 
} 
0
strcat(newSentence,word); 

newSentence doit être une chaîne. Et une chaîne est une séquence contiguë de caractères terminés par et y compris le premier null

EDIT: cette réponse a été downvoted 4 fois pour ce qui est écrit ci-dessus. Si vous pensez que c'est incorrect, veuillez expliquer. Sinon, supprimez votre downvote.

+0

newSentence a été déclarée correctement en tant que * char, et le malloc a l'air bien aussi. Je ne comprends pas ta réponse. –

+0

'newSentence' n'est jamais initialisé, donc il ne peut pas être une chaîne. Une chaîne doit inclure un terminateur null. – ouah

+0

@ouah Si vous changez votre réponse pour se concentrer sur 'newSentence' n'étant pas initialisé, je pourrais envisager d'annuler mon downvote –

2

Logiquement, ici:

j = sentence[i] 
start =sentence[i +1]; 

start et j sont des positions d'index dans le tableau de caractères, vous essayez d'assigner un char à eux, où tout vis vers le haut.

devrait être:

j= i; 
start = i +1; 

si votre algorithme est bon.

+0

merci tacp, je suis sûr que quelque chose de fixe, mais j'ai toujours cette erreur d'exécution embêtante. – Calgar99

+0

@ Calgar99 voir ma mise à jour? il y a un autre endroit qui a la même erreur. – taocp

+0

Merci tacp. Très appréciée. – Calgar99

1

Encore une autre variante du même ...

int main(int argc, const char *argv[]) 
{ 
    char sentence [] = "this is a sentence"; 
    size_t len = strlen(sentence); 
    char *newSentence = malloc(len + 1); 
    char *ptr_src = sentence; 
    char *ptr_dst = newSentence; 

    while(ptr_src) 
    { 
     char *next, *t; 

     next = strchr(ptr_src, ' '); // find next space 
     if (!next) next = sentence + len; // if not found, next = EOL 

     for (t = next; t > ptr_src;) 
     { 
      *ptr_dst++ = *--t; 
     } 
     if (*next) 
     { 
      *ptr_dst++ = *next++; 
      ptr_src = next; 
     } 
     else 
     { 
      *ptr_dst = 0; 
      break; 
     } 
    } 
    printf("[%s]",newSentence); 
    return 0; 
} 
1

Votre programme a eu quelques bugs. Ce que j'ai essayé de supprimer dans ce programme:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int main(void) { 
    char sentence [] = "this is a sentence"; 
    char *newSentence = (char *)malloc(strlen(sentence)+1); 
    int i,j,start, k; 
    start = 0; 

    for(i = 0;; i++) 
    { 

     if(sentence[i] == ' ' || sentence[i] == '\0') //sentence[i] == '\0' for the last word. 
     { 
      char *word = (char *) malloc((i - start)+1); 
      for(j = i-1, k = 0; j >= start; j--, k++) 
      { 
       word[k] = sentence[j]; 
      } 
     word[k++] = ' ';     //space after each word 
     word[k] = '\0';     

      strcat(newSentence,word); 

      start = i+1; 
     } 

    if (sentence[i] == '\0') 
     break; 
    } 
    printf("%s\n",newSentence); 
    return 0; 
} 

Vérifier la à http://ideone.com/Z9ogGk