Str2long - maj

Description

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';
}

Codes Sources

A voir également

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.