Toupper

Signaler
Messages postés
3
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
18 juin 2010
-
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
-
Comment utiliser "toupper" qui met les minuscules en majuscules svp ? :S

4 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Regarde un peu sous Google, avant de poser des questions:
Premier lien en tapant "toupper" sous google:
http://www.cplusplus.com/reference/clibrary/cctype/toupper/

toupper ne fait qu'un seul caractère, donc il faut le faire en boucle sur tous tes caractères.

(PS: Pense à valider les réponses quand elles répondent à ta question.)
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Au lieu d'appeler x fois une fonction, il serait certainement judicieux de déplacer un pointeur sur la chaine et d'effectuer un -32 sur l'octet si celui est compris entre 97 et 122.

Un call n'est pas gratuit...

@+
Arnotic,
Admin CS
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Un call n'est pas gratuit...

1) Ça peut être le cas, si:
- La fonction est "inlinée"
- Le compilateur optimise comme un grand ce genre de chose, en "inlinant" automagiquement

2) C'est un débutant, inutile de le noyer. Il optimisera vraiment quand ça sera nécessaire et qu'il aura plus d'expérience. Il est plus simple pour lui d'utiliser des manipulateurs de caractères.

3) Ou à défaut de soustraction on peut:
- Utiliser un masque (on pourrait aussi facilement l'adapter pour inverser la casse):
#include <stdio.h>

void myToUpper(char* s)
{
  while (s && *s)
  {
    if (*s >= 'a' && *s <= 'z')
      *s ^= 32;
    ++s;
  }
}

void myToLower(char* s)
{
  while (s && *s)
  {
    if (*s >= 'A' && *s <= 'Z')
      *s ^= 32;
    ++s;
  }
}

int main(void)
{
  char buff[] = "Un petit Test !";

  printf("%s\n", buff);
  myToUpper(buff);
  printf("%s\n", buff);
  myToLower(buff);
  printf("%s\n", buff);

  return 0;
}

- Utiliser une table de translation:
http://www.google.com/codesearch/p?hl=en#XAzRy8oK4zA/libc/stdlib/toupper_.c&q=toupper&sa=N&cd=3&ct=rc

- Le faire par plusieurs caractères en même temps:
http://code.google.com/p/stringencoders/source/browse/trunk/src/modp_ascii.c

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Ben voilà, mieux vaut apprendre cela directement que de prendre de mauvaises habitudes.

Pour le code inliné, attention on pourrait être surpris (je parle avec VS) par le code généré...

@+
Arnotic,
Admin CS