Partage
  • Partager sur Facebook
  • Partager sur Twitter

minuscules à majuscules, sans tout tester

Sujet résolu
    22 octobre 2006 à 21:50:22

    Salut, j'ai fais un prog qui affiche les initiales de chaques mots d'une chaine de carac rentrée au préalable.
    Et j'aimerais savoir s'il existait une fonction qui me permettait de transformer mes minuscules en majuscules, mon code, au cas où:

    #include <stdio.h>

    void AfficheInitiales(char* chaine, int taille)
    {
        int  i = 0;
        for ( i = 0 ; i < taille ; i ++)
        {
            if ( i == 0)
            {
                printf("%c",chaine[0]);
            }
            if ( chaine[i] == ' ')
            {
                printf("%c",chaine[i+1]);
            }
        }
    }

    int main()
    {
        int taille;
        char chaine[201];
        int i;
        scanf("%d", &taille);
        do
        {
            scanf("%c", &(chaine[0]));
        }
        while ((chaine[0] == '\n') || (chaine[0] == '\r'));
        for (i = 1; i < taille; i++)
            scanf("%c", &(chaine[i]));
        chaine[i] = 0;
        AfficheInitiales(chaine, taille);
        return 0;
    }



    Merci d'avance.


    @+ :soleil:
    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2006 à 21:56:35

      Citation : lord anubis

      Et j'aimerais savoir s'il existait une fonction qui me permettait de transformer mes minuscules en majuscules,


      Ben oui, c'est écrit dans ton livre de C... Voir les fonctions déclarées dans <ctype.h>
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        22 octobre 2006 à 22:56:01

        Ahah, l'exo de Prologin ! :p
        Il y a la fonction "toupper" (prononcer "to upper"). Convertit seulement un lettre, pas une chaine.

        Sinon, ton algo est faux, rentre une chaine avec plusieurs espaces à la suite, ou qui commence par un ou plusieurs espaces ! :)
        Secret (cliquez pour afficher)
        PARCOURIR CHAINE
        -- SI CARACTERE = 'ESPACE',
        --------> ALORS ON N'EST PAS DANS UN MOT

        -- SINON, SI AVANT ON ETAIT PAS DANS UN MOT (donc debut du mot),
        --------> ALORS AFFICHER CARACTERE EN MAJUSCULE
        FIN PARCOUR

        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2006 à 17:50:34

          oui, c vraiq ue je n'y avais pas pensé.

          Par contre, je n'asi pas trouvé upper sur le net, mais je vais encore continuer à chercher.

          Par contre( je me répète, j'ai trové une astuces, il suffit de retrancher 32 au numéro du caractère pour l'avoir en Maj.

          Voici le new code, testé et approuvé par prologin :p , et oui, t'avais raison.

          #include <stdio.h>

          void AfficheInitiales(char* chaine, int taille)
          {
              int  i = 0;
              for ( i = 0 ; i < taille ; i ++)
              {
                  if ( chaine[i-1] == ' ' || ( i == 0 && chaine[i] != ' '))
                  {
                      printf("%c",(chaine[i] - 32));
                  }
              }
          }

          int main()
          {
              int taille;
              char chaine[201];
              int i;
              scanf("%d", &taille);
              do
              {
                  scanf("%c", &(chaine[0]));
              }
              while ((chaine[0] == '\n') || (chaine[0] == '\r'));
              for (i = 1; i < taille; i++)
                  scanf("%c", &(chaine[i]));
              chaine[i] = 0;
              AfficheInitiales(chaine, taille);
              return 0;
          }






          @+ :soleil:
          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2006 à 18:03:11

            Citation :

            Fonction toupper() de <ctype.h>

            int toupper(int c)
            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2006 à 18:14:18

              Citation : lord anubis


              Par contre( je me répète, j'ai trové une astuces, il suffit de retrancher 32 au numéro du caractère pour l'avoir en Maj.

              Voici le new code, testé et approuvé par prologin :p , et oui, t'avais raison.

              #include <stdio.h>

              void AfficheInitiales(char* chaine, int taille)
              {
                  int  i = 0;
                  for ( i = 0 ; i < taille ; i ++)
                  {
                      if ( chaine[i-1] == ' ' || ( i == 0 && chaine[i] != ' '))
                      {
                          printf("%c",(chaine[i] - 32));
                      }
                  }
              }

              int main()
              {
                  int taille;
                  char chaine[201];
                  int i;
                  scanf("%d", &taille);
                  do
                  {
                      scanf("%c", &(chaine[0]));
                  }
                  while ((chaine[0] == '\n') || (chaine[0] == '\r'));
                  for (i = 1; i < taille; i++)
                      scanf("%c", &(chaine[i]));
                  chaine[i] = 0;
                  AfficheInitiales(chaine, taille);
                  return 0;
              }







              @+ :soleil:


              Beurk ! Du code pas portable.
              Si jamais je suis sous un OS qui n'utilise pas le code ascii, comment je fais ?
              La fonction toupper est là pour ça, c'est tout.
              • Partager sur Facebook
              • Partager sur Twitter
                23 octobre 2006 à 19:36:46

                Ah ouais pas mal, moi j'vais rendu ca :
                void AfficheInitiales(char* chaine, int taille)
                {
                        int i, word=0;
                        for(i=0; i<taille; i++)
                        {
                                if(chaine[i] == ' ')
                                        word = 0;
                                else if(word == 0)
                                {
                                        word = 1;
                                        printf("%c", toupper(chaine[i]));
                                }
                        }
                }

                La tienne est mieux ! ;) (sauf le toupper mais sinon..)
                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2006 à 22:22:34

                  Citation : lord anubis

                  Voici le new code, testé et approuvé par prologin :p , et oui, t'avais raison.


                              printf("%c",(chaine[i] - 32));



                  Arf ! Pas portable ! Savent pas ce qu'est l'EBCDIC les gens de Prologin ?

                  La solution portable c'est tolower() comme on se tue à le répéter...

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    23 octobre 2006 à 22:44:21

                    Oui, mais le code est texté automatiquement pour faire des tests et est validé si les tests sont OK. Il suffit que ca marche chez eux pour qu'ils ne s'en soucient pas ! :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 octobre 2006 à 22:46:24

                      Citation : guimers8

                      Oui, mais le code est texté automatiquement pour faire des tests et est validé si les tests sont OK. Il suffit que ca marche chez eux pour qu'ils ne s'en soucient pas ! :)


                      Je vois, n'importe quoi du moment que ça marche...

                      C'est nul. En tout cas, ce n'est pas une démarche industrielle et ça ne favorise pas la production d'un code de qualitaÿ.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        23 octobre 2006 à 22:48:13

                        Je suis entièrement d'accord. :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 octobre 2006 à 17:40:32

                          Ca y est, g corrigé, mais t sûr que c'était des int, et pas des chars??? o_O


                          @+ :soleil:
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 octobre 2006 à 18:05:08

                            Tu parles de toupper ?
                            Aussi bizarre que ca puisse paraitre, le prototype demnde bien un int. :( C'st vrai que c'est strange.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 octobre 2006 à 18:08:55

                              Citation : guimers8

                              Tu parles de toupper ?
                              Aussi bizarre que ca puisse paraitre, le prototype demnde bien un int. :( C'st vrai que c'est strange.


                              int fait office de caractère aussi (et les conversions int<->char sont "naturelles").
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 octobre 2006 à 18:17:50

                                Ah d'accord, je ne savais pas. D'ailleur je comprend maintenant car sinon le compilateur le signalerait! (cast manquant)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                minuscules à majuscules, sans tout tester

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown