Conversion
angem20
-
Mahmah Messages postés 497 Statut Membre -
Mahmah Messages postés 497 Statut Membre -
Bonjour,
je veux une fonction(en C)qui permet la conversion d'un alphabet miniscule en majuscule,c'est juste si je fais:
void convertir(char*c)
{*c=(*c-32);}
je veux une fonction(en C)qui permet la conversion d'un alphabet miniscule en majuscule,c'est juste si je fais:
void convertir(char*c)
{*c=(*c-32);}
Configuration: Windows Vista Internet Explorer 7.0
1 réponse
-
Bonjour,
Oui c'est correct tant que tu es sûr de ne pas envoyer d'autres caractères que les 26 lettres majuscules.
Pas de chiffre, pas d'espace etc.
M.-
merci beaucoup,ce n'est pas necessaire de declarer un autre pointeur sur un char,non?!c.a.d par exemple:
char *p;
p=c;
....- Non, non, j'aurais eu à écrire cette fonction je l'aurais faite comme telle:
#include "assert.h" inline void convertir( char *c ) { assert( ( 'A' <= *c ) && ( *c <= 'Z' ) ); (*c) -= 32; }
Ce qui est équivalent au final.
Le inline demande à ce que lors de la compilation la fonction soit intégrée au code et non codée comme un appel à une fonction. C'est envisageable ici car la fonction est très petite et ne va être appelée que peu de fois. (hors boucles)
le assert est une fonction qui fait planter le programme si la condition est fausse. Il en sort généralement une phrase du style: "Assertion failed: ( 'A' <= *c ) && ( *c <= 'Z' ) in file blabla.c, line xyz"
Par convention la fonction assert est définie différemment selon une macro.
Dans Visual C++ par exemple:
#ifdef NDEBUG #define assert(_Expression) ((void)0) // La fonction est remplacée // par une ligne qui ne fait rien et qui sera même retirée par le compilateur. #else // sinon la fonction est définie pour planter en cas d'erreur. (via une autre fonction) #define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) ) #endif /* NDEBUG */
Il faut que tu vérifies dans ton assert.h quelle est la macro utilisée.
Après, si tu utilises gcc par exemple, tu peux compiler avec gcc -DNomDeLaMacro ... pour définir la macro.
Cela permet de compiler facilement une version de debug et une de release.
(ici Visual n'est pas malin car plutôt que de devoir définir une macro pour désactiver, on en met plutôt une pour activer, généralement nommée _DEBUG, il se rattrappe car il crée systématiquement deux configurations prédéfinies pour compiler mais bon...)
M.
-