Préfixes d'un mot
Résolu
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
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.
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.
A voir également:
- Préfixes d'un mot
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Mettre un mot de passe sur un dossier - Guide
2 réponses
Si j'ai bien compris voilà à quoi devrait ressembler ton programme :
À l'exécution :
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
#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
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.
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.
je comprend ici qu'on aura une accumulation des valeur des préfixes à chaque itération :
je vois pas clairement la procédure. :/