IT is back !
encore plus fort,
encore plus rapide,
encore plus simple,
encore plus beau,
et avec un programmeur encore plus content !
voila le remake de str2long.
j ai rajoute math.h pour les puissances
grand merci a ceux qui m'ont aide a le refaire avec de percieux conseils.
quand j'y repense c'est vrai que ce que j'ai fait c'etait un peu de la mmmm..... (chut c po poli :)
L0L0
Source / Exemple :
#include <stdio.h>
#include <string.h>
#include <math.h> // powaaaaaaaa
// WAAIIIII
// J'ai trouvez comment calculer les puissances
// en titillant math.h
// c'est pow(nombre,exposant);
// pour info les valeur absolues des long
#define SIG_MIN -2147483648 // signe min
#define SIG_MAX 2147483647 // signe max
#define UNSIG_MIN 0 // pas signe nul
#define UNSIG_MAX 4294967295 // pas signe max
int is_chiffre(char car);
int car_chiffre(char car);
unsigned long chaine_nombre(char *chaine);
int verifier_chaine(char *chaine);
int main(int argc, char *argv[]){
char *chaine = ""; // chaine
unsigned long nombre; // nombre
printf("note de l'auteur :\n"); // eko
printf("il n'y a qu'en faisant des erreurs qu'on apprend\n"); // eko
printf("alors merci a ceux qui on m'ont aide a 'reparer' l'ancienne source"); // eko
if(argc != 2){ // 2 arguments
printf("utilisation : conv [nombre]"); // eko
return 0; // exit
}
if(!verifier_chaine(argv[1])){ // pas un nombre
printf("erreur : la valeur doit etre numerique."); // eko
return 0; // exit
}
chaine = argv[1]; // recupere la chaine
printf("Chaine : %s\n", chaine); // eko
nombre = chaine_nombre(chaine); // convertir
printf("Nombre : %d\n", nombre); // eko
}
// fonction de convertisassionnement
unsigned long chaine_nombre(char *chaine){
unsigned long resultat = 0;// nombre final
unsigned long nombre = 0; // avant les E10
int i; // boucle
int j; // boucle
int len = strlen(chaine); // longueur de la chaine
for(i = 0; i < len; i++){ // pour chaque car
nombre = 0; // initialise
// prend la valeur numerique du car en partant de droite
// note :
// j'ai pas compris :
// faire un pointeur sur une chaine de caractere
// puis l'incrementer au lieu de faire a chaque fois [i]
nombre = car_chiffre(chaine[len - i - 1]);
nombre *= pow(10,i); // puissance de 10
resultat += nombre; // ajoute
}
return resultat; // retourne le nombre final (long)
}
// verifie si tous les caractere sont des chiffres
int verifier_chaine(char *chaine){
int i; // boucle
for(i = 0; i < strlen(chaine); i++){ // pour chaque car
if(!is_chiffre(chaine[i])){ // si pas chiffre
return 0; // bye ...
}
}
return 1;
}
// verifie si le caractere est un chiffre
int is_chiffre(char car){
if(car >= '0' && car <= '9'){
return 1; // oui
}else{
return 0; // non
}
}
// convertion du caractere en chiffre
int car_chiffre(char car){
// wesh merci a JCDjcd
// ca c'est un truc auquel j'aurai jamais pense
// comme on a deja verifie que c'est un chiffre
// on retourne la valeur du car moins celle de 0
return car - '0';
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.