Ghjuventu
Messages postés4Date d'inscriptionmardi 4 décembre 2007StatutMembreDernière intervention 8 décembre 2007
-
4 déc. 2007 à 22:19
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
9 déc. 2007 à 02:08
Bonjour, je dois crée une fonction C++ sui doit transformé un texte saisit par l'utilisateur en MAJUSCUL intégralement! et je ne sais pa comment faire !!
De l'aide, svp VITE .....
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 déc. 2007 à 22:51
Tu prends ton caractère, après avoir vérifié qu'il s'agissait bien d'un caractère minuscule, puis tu lui additionne 0x20. Ainsi de suite pour tout les caractères de ta chaine.
nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 5 déc. 2007 à 18:34
Bonjour,
SAKingdom la soustraction et l'addition du caractere 0x20 est pas suffisante , il faut que tu verifies l'intervalle : est ce un chiffre?est ce autre chose qu'une lettre?si non , est-elle deja en majuscule? parce que sinon tu auras de mauvaises surprises crois-moi.
Salut.
je suis heureux de faire partie d'une grande famille ...!
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 6 déc. 2007 à 00:14
[auteur/GHJUVENTU/1228744.aspx Ghjuventu] >> Désolé pour cette réponse un peu abrupte mais j'étais très très très pressé et j'ai pas tout lu ton message.
Pour explication, il n'est pas du tout nécessaire de passer par un autre buffer. Tu peux directement tout modifier à même le buffer principal.
Ensuite, pas la peine d'entrer une taille. Toute chaine se termine, normalement, par un caractère nul (un 0). Suffis de tester si le caractère est nul pour savoir si on a atteint la fin de la chaine.
Pour savoir si un caractère est minuscule, test si il se situe entre a et z inclusivement.
Tu peux entrer 'a' et 'z' directement car, à la compilation, le compilateur les transformera en leur valeur hexadécimal.
tit_toinou
Messages postés49Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention16 juillet 2008 8 déc. 2007 à 11:28
imaginons que tu compile sur un ordinateur qui n'a pas les tables de caractères ASCII (bon je sais que c'est farfelu, mais bon imaginons) ton code va faire semblant de marcher.
je te conseille ce code
char *ToUpper (char *c)
{
while(*c != '\0') // 0 caractère '\0'
{
if('a' <= *c && *c <= 'z')
*c -= 'a'-'A'; // soustraire lintervalle, si lintervalle est négatif, ce code va ajouter l'intervalle
// on aurait aussi pu faire *c += 'A'-'a';
c++;
}
return c; // retourne sur fin de chaine
}
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 8 déc. 2007 à 16:12
Ce code revient exactement au même que le mien.
Tout les systèmes, que l'on peut qualifier de non préhistorique, ont une table ASCII.
Et puis d'ailleurs, si il n'en avait pas, rien ne garantie que ABCD se suivent. Va tu faire un test sur chaque caractère pour être certain ?
De toute façon, je ne crois pas qu'il est l'intention d'utiliser ce code sur un commodor 64.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 8 déc. 2007 à 20:05
Pour explication, on évite ainsi un appel au constructeur de copie lors du retour de la fonction.
On évite aussi d'appeler .length() et d'utiliser toupper.