7 réponses
Bonjour,
je suis confronté au même problème, je suis un débutant en langage C
mais je veux d'abord aprendre à participer plainement à votre forum
je suis confronté au même problème, je suis un débutant en langage C
mais je veux d'abord aprendre à participer plainement à votre forum
Voici la version en C (sachant que si ça marche en C ça marche en C++) :
On compile (ici c'est sous linux mais sous windows c'est le même principe) :
On prépare le fichier d'entrée :
Et on exécute :
Bonne chance
#include <stdio.h> #include <ctype.h> #include <stdlib.h> int caractere_autorise(char c){ if(c == ',' || c == '.' || c== '$' || tolower(c) != c) return 0; return 1; } int main(){ FILE *fp; char c; char *filename = (char *)malloc(sizeof(char)*255); printf("Fichier ? "); scanf("%s",filename); fp = fopen(filename,"r"); if(!fp){ fprintf(stderr,"impossible d'ouvrir %s\n",filename); return 1; } while((c=fgetc(fp))!=EOF){ if (caractere_autorise(c)) printf("%c",c); } fclose(fp); free(filename); return 0; }
On compile (ici c'est sous linux mais sous windows c'est le même principe) :
(mando@polgara) (~) $ gcc -W -Wall plop.c
On prépare le fichier d'entrée :
(mando@polgara) (~) $ cat monfichier ocancnaioNCOZIANIONczoncazoin;aca unonc$ca,i,pca. canspcannXCcpNcpNAnpiANC;acibain.caboiabc..cansioac$ cansiocanocaisn$$$$ cascasca.dazncaopinas
Et on exécute :
(mando@polgara) (~) $ ./a.out Fichier ? monfichier ocancnaioczoncazoin;aca unonccaipca canspcanncpcpnpi;acibaincaboiabccansioac cansiocanocaisn cascascadazncaopinas
Bonne chance
Humm cela me parait bien compliqué sachant que sa fait à peine 3 semaines que j'ai commencé les cours et qu'on a pas fait de choses aussi "détaillées" :s.
Ou alors pourrait - on afficher le texte saisie mais seulement les points,les virgules, les $ et les lettres en manuscules ?? avec des espaces qui doivent apres placés apres les virgules, des majsucules apres chaque point et la suppression des espaces avant les points ?
Je sais pas si je suis assez clair xD mais je demande quand même ^^".
Ou alors pourrait - on afficher le texte saisie mais seulement les points,les virgules, les $ et les lettres en manuscules ?? avec des espaces qui doivent apres placés apres les virgules, des majsucules apres chaque point et la suppression des espaces avant les points ?
Je sais pas si je suis assez clair xD mais je demande quand même ^^".
Bonjour,
>mamiemando, tu donne la méthode pour lire la chaine depuis un fichier Yann a besoin de la méthode de lecture à partir d'une chaine saisie par l'utilisateur, ce qui le décharge de toute la gestion (complexe) du fichier.
>Yann, tu peux réutiliser la fonction caractere_autorise de mamiemambo et l'appliquer à chaque caractère de ta chaine. Je n'ai pas bien compris ce que tu demande dans ton dernier post...
Un autre Yann
>mamiemando, tu donne la méthode pour lire la chaine depuis un fichier Yann a besoin de la méthode de lecture à partir d'une chaine saisie par l'utilisateur, ce qui le décharge de toute la gestion (complexe) du fichier.
>Yann, tu peux réutiliser la fonction caractere_autorise de mamiemambo et l'appliquer à chaque caractère de ta chaine. Je n'ai pas bien compris ce que tu demande dans ton dernier post...
Un autre Yann
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
un autre yann > lire un fichier ou stdin ce n'est pas fondamentalement différent ! Il suffit de
1) demander la chaîne à convertir avec un scanf, en la stockant dans un tampon,
2) parcourir le tampon avec uneboucle for et la fonction caractere_autorise.
Vu les éléments que j'ai déjà donné je pense que Yann peut largement y arriver. Et vu que c'est un exercice ça me semble plus profitable qu'il trouve par lui-même.
Bonne chance
1) demander la chaîne à convertir avec un scanf, en la stockant dans un tampon,
2) parcourir le tampon avec uneboucle for et la fonction caractere_autorise.
Vu les éléments que j'ai déjà donné je pense que Yann peut largement y arriver. Et vu que c'est un exercice ça me semble plus profitable qu'il trouve par lui-même.
Bonne chance
Bonjour, en fait je demande juste que lorsque que l'utilisateur tape un texte, seuls les points, les virgules, les $ et les minuscules seront affichés par le programme. Apparement, avec if cela ne marche pas >.< donc je vais tenter autre chose ^^". mamiemandos tout ce que tu as utilisé à part if, while et déclarer les constantes ou variables je ne l'es pas encore vu ^^", sa fait que 3 semaines que j'ai commencé ^^".
Enfin bon, je vais essayer de faire quelque chose....
Enfin bon, je vais essayer de faire quelque chose....
La seule chose que tu n'as peut être pas vu c'est la partie sur l'ouverture d'un fichier mais si c'est sur la saisie dans la console que tu dois faire ton traitement, tu n'en as pas besoin. Si on se contente de lire sur la console :
Ce qui donne
Note 1 : calloc est équivalent à malloc à ceci prêt que les cases sont toutes initialisées à 0. Or tu sais qu'une chaîne doit se terminer par '\0', donc c'est pour ca que j'utilise calloc et pas malloc. Pour plus d'info, tape dans une console ou sur google :
Bien entendu qui dit malloc/calloc dit free, il ne faut donc pas oublier de libérer la mémoire dès que tu n'as plus besoin de la variable que tu as alloué.
Note 2 : il ya peut être des fonctions que j'utilise que tu ne connais pas (genre tolower ou strlen). Pour plus d'infos :
Mais il faut bien que tu comprennes que c'est à toi, en tant qu'élève, de les trouver en cherchant sur google. Plus tard quand tu devras faire un projet en C on ne te dira pas d'utiliser telle ou telle fonction, ce sera à toi de les trouver ou de les écrire.
Bonne chance
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> int caractere_autorise(char c){ if(c == ',' || c == '.' || c == '$' || tolower(c) != c) return 0; return 1; } int main(){ char *buffer = (char*)calloc(sizeof(char),255); unsigned n,i; printf("entrez la chaîne de caractère:\n"); scanf("%s",buffer); printf("résultat:\n"); n = strlen(buffer); for(i=0;i<n;++i){ if (caractere_autorise(buffer[i])){ printf("%c",buffer[i]); } } printf("\n"); free(buffer); return 0; }
Ce qui donne
(mando@cenedra) (~) $ gcc -W -Wall plop.c (mando@cenedra) (~) $ ./a.out entrez la chaîne de caractère: ;pcasksa,cacsa$$cacs..SASAAacsa résultat: ;pcasksacacsacacsacsa
Note 1 : calloc est équivalent à malloc à ceci prêt que les cases sont toutes initialisées à 0. Or tu sais qu'une chaîne doit se terminer par '\0', donc c'est pour ca que j'utilise calloc et pas malloc. Pour plus d'info, tape dans une console ou sur google :
man calloc
Bien entendu qui dit malloc/calloc dit free, il ne faut donc pas oublier de libérer la mémoire dès que tu n'as plus besoin de la variable que tu as alloué.
Note 2 : il ya peut être des fonctions que j'utilise que tu ne connais pas (genre tolower ou strlen). Pour plus d'infos :
man strlen man tolower
Mais il faut bien que tu comprennes que c'est à toi, en tant qu'élève, de les trouver en cherchant sur google. Plus tard quand tu devras faire un projet en C on ne te dira pas d'utiliser telle ou telle fonction, ce sera à toi de les trouver ou de les écrire.
Bonne chance