[C][Minuscules/majuscules]

URGENT !! Svp. c un exercice que j'ai pas trouver la solution.
comment ecrire une fonction qui fait la conversion d'uun caractère miniscule en un caractère majuscule en langage C. ?
sans utiliser la fonction toupper( ).
merci.

7 réponses

  1. tu prend les codes ascii
    a=97
    A=65
    donc 97 devient 65

    ca revient à soustraire 32, il faut quand même controler l'intervale et tenir compte de lettres accentuées

    http://www.lookuptables.com/

    voilà l'exemple inverse, à toi de l'adapter

    #include <stdio.h>
    #include <stdlib.h>

    void
    minuscule(char s[])
    {
    int index;

    /* la chaîne est parcourue par index */
    for (index= 0; s[index] != '\0'; index++)
    /* si le caractère à la position index est majuscule*/
    if (s[index] >= 'A' && s[index] <= 'Z')
    /* le remplacer par son équivalent en minuscule */
    s[index]= s[index] - 'A' + 'a';
    }

    char salut[]= "chaine de caractère à traiter\n";

    int main(void)
    {
    minuscule(salut);
    puts(salut);
    return EXIT_SUCCESS;
    }

    bonne chance
    1. Bonsoir,
      bien que le sujet date déjà je poste juste ceux code alternatif au tien (@Max)

      
      /* Mise en majuscule */
      char f_UpChar(char c){
      	
      	return ( ((c)>='a') && ((c)<='z') ? ((c)-'a' + 'A') : (c) );
      }
      
      /* Mise en Miniscule */
      char f_DownChar(char c){
      	
      	return ( ((c)<='A') && ((c)<='Z') ? ((c)-'A' + 'a') : (c) );
      } 
      
      
      1. Une fonction qui fait le boulo en 2 lignes :

        char min(char car){
        return ((car<'A') || (car>'Z')) ? (car) : (car+32);
        }

        Merci K&R
        1. Pourquoi se casser la tête ?

          #include <stdio.h> 
          
          int main(void) 
          { 
               char a; 
          
               while ( a != '\n' ) 
               { 
                   scanf("%c", &a); 
                   printf("%c", a - 32); 
               } 
               printf("\n"); 
               return 0; 
          } 
          
          1. Contributeur
            Et pourquoi déterrer un topic avec un programme moins bon que ceux proposés ? Pour info il ne faut jamais faire une comparaison avec une variable non initialisée. Et aussi ne pas oublier de vider le flux clavier.
        2. de Minuscules ---> majuscules avec la notion de pointeur en C

          #include<stdio.h>
          #include<conio.h>
          #include<string.h>
          char* majuscule(char *s)
          {
          char *p;
          for (p=s;*p;p++)
          if (*p >= 'a' && *p <= 'z')
          *p=*p +'A'-'a';// ou bien -32
          return s;
          }
          main()
          {
          char s1[65];
          printf("donner une chaine s1: ");
          gets(s1);
          printf("la chaine en majuscule :");
          puts(majuscule(s1));
          getch();
          }
          1. de Minuscules ---> majuscules avec la notion de pointeur en C

            #include<stdio.h>
            #include<conio.h>
            #include<string.h>
            char* majuscule(char *s)
            {
            char *p;
            for (p=s;*p;p++)
            if (*p >= 'a' && *p <= 'z')
            *p=*p +'A'-'a';// ou bien -32
            return s;
            }
            main()
            {
            char s1[65];
            printf("donner une chaine s1: ");
            gets(s1);
            printf("la chaine en majuscule :");
            puts(majuscule(s1));
            getch();
            }
            1. *p=*p -'A'+'a';
            2. Contributeur
              @scercroNon !
              De minuscule en majuscule, c'est bien : *p += 'A' - 'a';
            3. #include<stdio.h>
              #include<stdlib.h>
              main()
              {
              char s[100];
              int i=0;
              printf("entrez une chaine \t");
              gets(s);
              while(s[i]!='\0')
              {
              if(97<=s[i])
              s[i]-=32;
              i++;}

              puts(s);
              system("pause");
              }
            4. voila c plus simple ;)
            5. Contributeur
              Je trouve que *p='A' - 'a' bien plus simple en plus d'être plus lisible.
              En plus tu ne vérifies pas la borne inférieure !
              La fonction gets() ne doit pas être utilisée. On utilise plutôt la fonction fgets...
              Et enfin, le post date de plus de deux ans...