Problème de C++

Yann -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, j'aimerai savoir comment en C++ à partir d'une chaine de caractère saisie par un utilisation, un programme peut ré-afficher le texte à l'exception des points, des virgules, des $ et des Majuscules ?

Merci d'avance.

7 réponses

  1. mousarga
     
    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
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Voici la version en C (sachant que si ça marche en C ça marche en C++) :
    #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
    0
  3. Yann
     
    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 ^^".
    0
  4. Un autre Yann
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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
    0
  7. Yann
     
    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....
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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 :
    #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
    0