IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Caractères majuscules et minuscules


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut Caractères majuscules et minuscules
    Bonjour, j'ai codé une fonction (qui marche) qui me renvoie la composition atomique d'une espèce chimique (bien entendu, il y a sûrement plus performant que cette fonction)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    unsigned short NumbersAtoms(char * s,char atom)
    {
    /* inputs :
      
       s : string containing the name of a species
       
       atom : name of an atom : either 'C' or 'H' or 'O' or 'N'
     
       this function returns the numbers of atoms "atom" constituting a species 
     */
     
     unsigned short nb=0,i;
     
     /* check that all the alphabetic characters are either C or c or H or h or O or o
        or N or n
     */
     for(i=0;i<strlen(s);++i)
       if(isalpha(s[i]) && s[i]!='C' && s[i]!='c' && s[i]!='H' && s[i]!='h' &&
       s[i]!='O' && s[i]!='o' && s[i]!='N' && s[i]!='n' && s[i]!='-')
         return 0;
     
     char * p=strchr(s,atom);
     while(p!=NULL)
     {
       char * ss=strdup(p+1);
       for(i=0;isdigit(ss[i]) && i<strlen(ss);++i);
       if(i==0)
       {
         nb+=1;
         ++p;
       }
       else
       {
         ss[i]='\0';
         nb+=strtod(ss,NULL); /* == strtod(ss,&ss); */
         p+=i;
         free(ss); ss=NULL;
       }
       s=p;
       p=strchr(s,atom);
     } /* end of while(p!=NULL) */
     
     return (unsigned short) nb;
    }
    donc NumbersAtoms("C7H16",'C') me renvoie bien 7, NumbersAtoms("CH3CHO",'H') me renvoie bien 4 et NumbersAtoms("C7KET21",'C') me renvoie bien 0 (résultat attendu)

    Ma question est : et si l'utilisateur rentre le c7h16 (lettres minuscules) comment faire ? Comment écrire d'un coup la recherche char * p=strchr(s,atom); sachant que je recherche un caractère majuscule ou minuscule ? Ma fonction ne traite que les lettres majuscules.

    Merci

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Comme tu es sûr que ton composé n'apparaîtra qu'une fois, au moment de faire la recherche, si tu ne le trouves pas en majuscule, tu peux faire une autre recherche pour la minuscule

    (je crois que minuscule = majuscule - 36 a tester...)

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Tu peux tranformer ta chaîne en en la passant en majuscules avec char *strupr(char *src, char *but);
    Include <string.h> je crois.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Bonjour, merci de vos réponses si rapides. Concernant la fonction strupr voici mon message code (sur un cas tout simple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    int main()
    {
      char * s1="abc";
      char * s2=strupr(s1);
      printf("s2 = %s\n",s2);
      return 0;
    }
    et voici le message d'erreur que j'obtiens

    maj.c: Dans la fonction « main »:
    maj.c:8: attention : implicit declaration of function `strupr'
    maj.c:8: attention : initialisation transforme un entier en pointeur sans transtypage
    /tmp/ccowE0yA.o(.text+0x1a): In function `main':
    maj.c: undefined reference to `strupr'
    je suis un peu perplexe. J'avais pourtant repris un exemple du net (et donc j'ai inclus <string.h>).
    J'ai donc repris le code source et voici ma nouvelle fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
     
    void lwtoup(char * s)
    {
    /* converts s in a string with up char
       s will be modified
     */
      while(*s!='\0')
      {
        if(islower(*s)) *s=toupper(*s);
        ++s;
      }
    }
     
    int main()
    {
      char s1[]="c7h15-2";
      lwtoup(s1);
      printf("s1 = %s\n",s1);
      return 0;
    }
    Merci

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    maj.c: Dans la fonction « main »:
    maj.c:8: attention : implicit declaration of function `strupr'
    maj.c:8: attention : initialisation transforme un entier en pointeur sans transtypage
    /tmp/ccowE0yA.o(.text+0x1a): In function `main':
    maj.c: undefined reference to `strupr'
    Normal, cette fonction n'existe pas

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Tu peux te debarrasser du test islower() puisque toupper() ne fait rien si le caractere est deja une majuscule.
    Une version simple de la fonction est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include <ctype.h>
     
    void strtoupper(char *s)
    {
       if (s)
       {
          while(*s)
          {
             /* EDIT: correct usage of toupper() */
             *s = toupper(*s);
             s++;
          }
       }
    }

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par DaZumba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <ctype.h>
     
    void strtoupper(char *s)
    {
       if (s)
       {
          while(*s)
          {
             toupper(*s);
             s++;
          }
       }
    }
    Je pense que tu voulais dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     #include <ctype.h>
     
     void strtoupper(char *s)
     {
        if (s)
        {
           while(*s)
           {
              *s = toupper(*s);
              s++;
           }
        }
     }
    Jc

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    OK merci.

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Effectivement, char *strupr(char *src); ext une extension qui n'est donc pas définie partout, désolé

  10. #10
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par fearyourself
    Je pense que tu voulais dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      ...
              *s = toupper(*s);
    ...
    Oui. Merci de m'avoir corrige.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Swoög
    (je crois que minuscule = majuscule - 36 a tester...)
    Bidouille... toupper() tolower() de <ctype.h> ...

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Bidouille... toupper() tolower() de <ctype.h> ...
    exact... j'ai pas l'habitude de ces fonctions, désolé... (purée, c'est vrai que c'est vraiment de la bidouille quand même, lol)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2005, 20h08
  2. problème majuscule et minuscule
    Par rdams dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/10/2005, 14h45
  3. Réponses: 3
    Dernier message: 08/08/2005, 11h24
  4. Différence entre majuscule et minuscule dans une requête
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/06/2004, 14h42
  5. [RICHEDIT] -> Majuscule et Minuscule ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo