Toupper

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

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 juin 2010 à 14:14
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]
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
18 juin 2010 à 15:00
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 juin 2010 à 15:42
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]
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
18 juin 2010 à 15:57
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
0
Rejoignez-nous