Préfixes d'un mot

Résolu
UniCode08 Messages postés 1 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'essaie d'accomplir un programme en C qui donne les préfixes d'un mot donné en utilisant deux solution une qui effectue au plus taille(mot)*(taille(mot) +1 )/2 concaténation et l'autre en effectuant taille(mot) concaténation au plus
pour la deuxième solution voilà mon programme malheureusement ne marche toujours pas
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main() {
        char * w=malloc(sizeof(*w)*256);
        int i;
        int nbr_pref=0;
        int taille=strlen(w);
            printf("entrez un mot :\n");
            scanf("%s",w);
            printf("vos prefixes sont:\n");
                        for(i=0;i<taille;i++){
                        printf("%s",w[i]);
                        printf("\n");
                        nbr_pref++;
                                             }
        getch();
        }

ca s'execute pas. pour la deuxième est ce que la boucle doit tourné selon le nombre de concaténation maximum permis?
MErcii pour votre attention.

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Si j'ai bien compris voilà à quoi devrait ressembler ton programme :

    #include <stdio.h> 
    #include <string.h> 
    
    int main(){ 
        const unsigned max_len = 255; 
        unsigned i, j = 0, len; 
        char word[max_len]; 
    
        printf("Tapez un mot:\n"); 
        scanf("%s", word); 
        len = strnlen(word, max_len); 
        for(i = 0; i < len; ++i) { 
            printf("Préfixe %d: ", i + 1); 
            for(j = 0; j <= i; ++j) { 
                printf("%c", word[j]); 
            }    
            printf("\n"); 
        } 
        printf("%d préfixes trouvés\n", i); 
        return 0; 
    }


    À l'exécution :

    (mando@silk) (~) $ gcc -W -Wall toto.c  
    (mando@silk) (~) $ ./a.out  
    Tapez un mot: 
    tapir 
    Préfixe 1: t 
    Préfixe 2: ta 
    Préfixe 3: tap 
    Préfixe 4: tapi 
    Préfixe 5: tapir 
    5 préfixes trouvés


    Quelque remarques :

    - getch n'est qu'un hack "windows" pour pouvoir lancer une commande ms-dos et avoir le temps de lire ce qui est dans la fenêtre... Mais en tout rigueur le programme ne devrait pas comporter getch et devrait simplement être exécuté depuis une fenêtre commande ms-dos et non pas par un explorateur.

    - tu as oublié le type de retour de main (int). La fonction main est sensée retourner 0 (EXIT_SUCCESS) quand tout va bien et une autre valeur sinon (par exemple EXIT_FAILURE). Si tu veux utiliser les constantes EXIT_SUCCESS et EXIT_FAILURE il faut aussi inclure <stdlib.h>

    - si tu décides de faire un malloc, tu es sensé libérer la mémoire quand tu n'utilise plus cette zone mémoire (free(w) dans ton code). Par ailleurs ici vu que tu connais avant la compilation du programme la taille de ton bloc mémoire, autant faire une allocation statique comme j'ai fait, ce qui évite d'avoir à se poser ce genre de question.

    Bonne chance
    1
    1. UniCode08
       
      Bonjour
      je comprend ici qu'on aura une accumulation des valeur des préfixes à chaque itération :
      for(i = 0; i < len; ++i) { 
              printf("Préfixe %d: ", i + 1); 
              for(j = 0; j <= i; ++j) { 
                  printf("%c", word[j]); 
              }    
              printf("\n"); 
          } 
      

      je vois pas clairement la procédure. :/
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    je vois pas clairement la procédure. :/

    Je n'ai pas compris la question.

    Dans l'idée la boucle "for j" écrit caractère par caractère (le j-ième caractère) le mot et s'arrête une fois le i-ème caractère atteint. Ceci est englobé dans une boucle "for i" qui repousse d'un cran ce caractère à chaque itération.
    0
    1. UniCode
       
      Bonsoir mamiemando!
      Je vois ce que tu veux dire =)
      Merciii
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      Parfait, bonne continuation !
      0