Préfixes d'un mot

Résolu/Fermé
UniCode08 Messages postés 1 Date d'inscription jeudi 4 octobre 2012 Statut Membre Dernière intervention 4 octobre 2012 - 4 oct. 2012 à 09:53
mamiemando Messages postés 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 - 10 oct. 2012 à 19:34
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 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 7 829
Modifié par mamiemando le 4/10/2012 à 10:24
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
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 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 7 829
5 oct. 2012 à 20:38
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
Bonsoir mamiemando!
Je vois ce que tu veux dire =)
Merciii
0
mamiemando Messages postés 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 7 829
10 oct. 2012 à 19:34
Parfait, bonne continuation !
0