[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
    10
    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();
      }
      5
      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; 
        } 
        
        4
        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.
          0
      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();
        }
        2
        1. *p=*p -'A'+'a';
          0
        2. Contributeur
          @scercroNon !
          De minuscule en majuscule, c'est bien : *p += 'A' - 'a';
          0
        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");
          }
          0
        4. voila c plus simple ;)
          0
        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...
          0
      3. 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
        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
          0