(WIN32)(DEV-C++) MANIPULATION CHAINE DE CHARACTERES

BertaNd Messages postés 9 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 17 août 2005 - 15 août 2005 à 00:44
BertaNd Messages postés 9 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 17 août 2005 - 17 août 2005 à 00:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33241-win32-dev-c-manipulation-chaine-de-characteres

BertaNd Messages postés 9 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 17 août 2005
17 août 2005 à 00:28
-"C'était pas une question de ma part"
j'avais compris que tu voulais dire ""Majusculer" se fait PAR(au lieu de pas) CharUpper()"
mais c'est juste que je ne connaissais pas ces fonctions, j'en avais trouvé des autres sur msdn assez compliqués mais je n'avais pas reussi a les utiliser,
et quand tu m'as donné ces fonctions, je m'etonnais que ce soit aussi simple !
(faut pas chercher a comprendre ! j'ai un peu de mal, c'est les vacances !!! :-) )


""YOUpi youPI à bébé" -> "youPI YOUpi à BéBé"
c'est pas le but du jeu ???"
en fait, mon but, c'etait d'alterner minuscules/majuscules : "bertrand" -> "BeRtRaNd"
mais je vais ajouter ton idee


-et donc pour retourner, il n'y a pas besoin de recopier la chaine de charactere dans une autre?
je vais essayer...


merci, autrement, pas d'autres problemes?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 août 2005 à 11:05
ah oui et pour Retourner() il n'y a pas besoin de recopier donc pas basoin d'alloc dynamique.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 août 2005 à 11:03
C'était pas une question de ma part, si je te dis que c'est CharUpper() c'est ainsi. Quand on prog pour Windows on se dégage au maximum du CRT, ça donne un exe plus compact.

char szbuff[260];
strcpy(szbuff, "YOUpi youPI à bébé");
Alterner(szbuff);
MessageBox(0, szbuff, "A", 0);
J'obtiens "youPI YOUpi à BéBé", c'est pas le but du jeu ???
BertaNd Messages postés 9 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 17 août 2005
15 août 2005 à 10:49
-pour mettre en majuscule et en minuscule, c'est tout simple !
j'avais trouvé "_strlwr" et "_strupr", mais j'avais pas reussi a le faire marcher !

-pour alterner, ton code marche pas... il me fait que le premier charactere

-pour retourner, je me trouve un tuto sur l'allocation dynamique, et je met a jour ma source

-desolé, la prochaine fois, je mettrais mes questions sur le forum

merci
brownfire Messages postés 25 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 3 mai 2006
15 août 2005 à 10:35
je trouve que se programme est vraiment très bien fait je te tire mon chapeau !
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 août 2005 à 09:25
"Majusculer" se fait pas CharUpper() sous Windows qui saura convertir tous les caractères de la chaine et pas seulement une plage de valeurs.
"Minusculer" par CharLower().

En C il faut utiliser les pointeurs.
Pas besoin de strlen, on gagne 1 parcours de la chaine.
void Alterner(char* psz)
{
while(*psz) {
if((*psz >= 97) && (*psz <= 122)) *psz -= 32;
else if((*psz >= 64) && (*psz <= 90)) *psz += 32;
psz++;
}
}

Retourner() est à bannir sur le modèle de ta fonction !!!
char sztemp[4096]; Trop gros dans une func, faut faire une alloc dynamique.
Heureusement le compilo aura placé cela en global sinon ta stack risque explosion.
Risque bufferOverflow, on ne peut pas présumer de la longueur quand on reçoit un pointeur en param.
De toutes les manières, il est totalement inutile de recopier le buffer.
void Retourner(char *psz)
{
char *c = psz, a;
while(*c) c++;
while(psz < --c) {a *psz; *psz++ *c; *c = a;}
}

La prochaine fois tu passes par le forum pour demander correction de tes fonctions.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
15 août 2005 à 01:23
il met un petit moment a afficher la derniere source, mais si tu l'as dans ton compte alors ça veut dire qu'elle va apparaitre.
BertaNd Messages postés 9 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 17 août 2005
15 août 2005 à 00:44
desole, je crois que j'ai fais un doublon, c'est parce que je vois rien dans la liste de mes sources
peut etre parce que je l'ai upload avec firefox...
Rejoignez-nous