(WIN32)(DEV-C++) MANIPULATION CHAINE DE CHARACTERES
BertaNd
Messages postés9Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention17 août 2005
-
15 août 2005 à 00:44
BertaNd
Messages postés9Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention17 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.
BertaNd
Messages postés9Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention17 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és9Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention17 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és25Date d'inscriptionjeudi 14 juillet 2005StatutMembreDerniè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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 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és9Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention17 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...
17 août 2005 à 00:28
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?
15 août 2005 à 11:05
15 août 2005 à 11:03
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 ???
15 août 2005 à 10:49
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
15 août 2005 à 10:35
15 août 2005 à 09:25
"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.
15 août 2005 à 01:23
15 août 2005 à 00:44
peut etre parce que je l'ai upload avec firefox...