Préfixes d'un mot

Résolu
UniCode08 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33772 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

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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
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
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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
UniCode
 
Bonsoir mamiemando!
Je vois ce que tu veux dire =)
Merciii
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Parfait, bonne continuation !
0