BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
19 juin 2003 à 22:46
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
21 juin 2003 à 18:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 21 juin 2003 à 18:07
unsigned long chaine_nombre(char* source)
{
char *c = source;
unsigned long n = 0;
while(*c >= 48 && *c <= 57) {
n *= 10;
n += (*c - 48);
c++;
}
return n;
}
ciao...
cs_Skyman
Messages postés24Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention26 septembre 2003 20 juin 2003 à 12:37
cool ! Merci pour tout ces commentaire !
ca fait plaisir et ca motive! :-D
note : je ne savais pas que atol(); existait ...
on m'avait parle que de atoi();
je sais que j'ai un peu abuse avec les switch (lol :)
et que les break; apres return ca sert pas vraiment ...
les 2 boucle pour convertir une chaine en nombre c'est pour les puissance 10 et je sais pas faire les puissances en c !
selon sa position il multiplie par 10
promis je refais ca tout de suite.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 juin 2003 à 10:17
donc maintenat qu'on t'a tout dit,
nouveau cahier des charges:
unsigned long chaine_nombre(char *chaine){
unsigned long nombre = 0; // nombre final
// AUCUN strlen utile
// AUCUN appel de fonction externe
// 1 SEULE boucle par pointeur et valeur directe en sortie
return nombre; // retourne le nombre final (long)
}
Nous attendons la nouvelle mouture.
ciao...
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 20 juin 2003 à 10:06
Les 'break' juste apres des 'return' c'est super util !
Et je ne comprend pas pourquoi tu as besoin de 2 boucles pour convertir une chaine en un monbre ?
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 20 juin 2003 à 10:03
nombre = nombre + nombre_temp; // ajoute
Ca se programme :
nombre += nombre_temp; // ajoute
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 20 juin 2003 à 10:02
Ah oui, tu pourrais faire un pointeur sur une chaine de caractere puis l'incrementer au lieu de faire a chaque fois [i] !
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 20 juin 2003 à 10:00
Voici comment reprogrammer des fonctions !!!
***************************
int is_chiffre(char car)
{
return (car >= '0' && car <= '9');
}
***************************
He oui en une ligne, et infiniment plus rapide !
La seconde fonction :
*****************************
int car_chiffre(char car)
{
return car - '0';
}
***********************
He oui encore une ligne et encore infiniment plus rapide !
Il ne faut pas utiliser les switch a gogo !
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 20 juin 2003 à 02:51
et aussi, essaie de ne pas appeler strlen à toute les fois, stocke la longueur de la chaine dans une var, ca va être beaucoup, beaucoup, beaucoup, beaucoup, beaucoup, .... plus rapide!!!
dans ton for(), strlen est appeler à chaque tour de boucle donc il doit recalculer la longueur de la chaine à chaque fois ...
et en passant, je dit ca comme ca mais il existe pas seulement atoi() pour les int ... il y à aussi atol() pour les long ... atof() pour les double etc ... et si je peut me permettre, il y à une facon beaucoup beaucoup plus rapide et courte de faire ce genre de convertion ...
~(.:: NitRic ::.)~
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 juin 2003 à 22:46
atoi() retourne un 32 bits signe et non 8 bits.
Faudrait aussi nettement ameliorer ton algo, car_chiffre(char car) est une calamite.
Je te laisse trouver pourquoi. Au boulot.
ciao...
21 juin 2003 à 18:07
{
char *c = source;
unsigned long n = 0;
while(*c >= 48 && *c <= 57) {
n *= 10;
n += (*c - 48);
c++;
}
return n;
}
ciao...
20 juin 2003 à 12:37
ca fait plaisir et ca motive! :-D
note : je ne savais pas que atol(); existait ...
on m'avait parle que de atoi();
je sais que j'ai un peu abuse avec les switch (lol :)
et que les break; apres return ca sert pas vraiment ...
les 2 boucle pour convertir une chaine en nombre c'est pour les puissance 10 et je sais pas faire les puissances en c !
selon sa position il multiplie par 10
promis je refais ca tout de suite.
20 juin 2003 à 10:17
nouveau cahier des charges:
unsigned long chaine_nombre(char *chaine){
unsigned long nombre = 0; // nombre final
// AUCUN strlen utile
// AUCUN appel de fonction externe
// 1 SEULE boucle par pointeur et valeur directe en sortie
return nombre; // retourne le nombre final (long)
}
Nous attendons la nouvelle mouture.
ciao...
20 juin 2003 à 10:06
Et je ne comprend pas pourquoi tu as besoin de 2 boucles pour convertir une chaine en un monbre ?
20 juin 2003 à 10:03
Ca se programme :
nombre += nombre_temp; // ajoute
20 juin 2003 à 10:02
20 juin 2003 à 10:00
***************************
int is_chiffre(char car)
{
return (car >= '0' && car <= '9');
}
***************************
He oui en une ligne, et infiniment plus rapide !
La seconde fonction :
*****************************
int car_chiffre(char car)
{
return car - '0';
}
***********************
He oui encore une ligne et encore infiniment plus rapide !
Il ne faut pas utiliser les switch a gogo !
20 juin 2003 à 02:51
dans ton for(), strlen est appeler à chaque tour de boucle donc il doit recalculer la longueur de la chaine à chaque fois ...
et en passant, je dit ca comme ca mais il existe pas seulement atoi() pour les int ... il y à aussi atol() pour les long ... atof() pour les double etc ... et si je peut me permettre, il y à une facon beaucoup beaucoup plus rapide et courte de faire ce genre de convertion ...
~(.:: NitRic ::.)~
19 juin 2003 à 22:46
Faudrait aussi nettement ameliorer ton algo, car_chiffre(char car) est une calamite.
Je te laisse trouver pourquoi. Au boulot.
ciao...