begin process at 2012 05 30 06:43:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

recuperer les nombres dans une chaine de caractère


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

recuperer les nombres dans une chaine de caractère

dimanche 19 mars 2006 à 11:26:42 | recuperer les nombres dans une chaine de caractère

vectoriel

Dans mon programme je prend un chaine de caractère et je la crypte en md5. J'aimerai pouvoir récupérer les 3 premiers chiffres présents dans le md5.
Est ce possible? merci d'avance
dimanche 19 mars 2006 à 13:01:01 | Re : recuperer les nombres dans une chaine de caractère

Oeil_de_taupe

Salut,


Tu veux dire par là que dans une chaine de caractères (le retour du MD5) tu voudais pouvoir transformer les 3 premiers chiffres (sous forme de char) et les transformer en entier?

Si j'ai bien compris ta question il te suffirait de faire une boucle sur ta chaîne de caractère afin d'isoler les 3 premiers chiffres (en format char) dans un autre buffer et utiliser la fonction atoi afin de convertir le char en chiffre.


Mais je n'y vois pas tellement l'intêret, tu enlèves beaucoup d'information au checksum il devients beaucoup moins efficace.
C'est peut-être (sans doute) moi qui ai mal compris ta question .
dimanche 19 mars 2006 à 13:23:52 | Re : recuperer les nombres dans une chaine de caractère

vectoriel

Non en fait je voudrait récupérer uniquement les 3 premiers nombres par exemple sur la chaine dgfedf2df4sdzsd1jku je voudrait récupérer 241
voila
dimanche 19 mars 2006 à 16:59:03 | Re : recuperer les nombres dans une chaine de caractère

Joky

Membre Club
char *c = szMd5;

while(*c)
{
    if( (*c > '0') && (*c < '9') )
    {
       //Alors ici c'est un chiffre;
       //Conversion avec atoi
    }
    c++;
}

if(!Meilleur("Joky")) return ERREUR;<

dimanche 19 mars 2006 à 17:19:36 | Re : recuperer les nombres dans une chaine de caractère

Oeil_de_taupe

Bon ben moi je suis plus lent que Joky , mais je poste quand même ma proposition.
J'imagine que on pourrait faire une fonction 1000X plus rapide, mais cette solution marche quand même.

#include<math.h>
#include<ctype.h>

#include<iostream>
using namespace std;


//Permet de rechercher le nb de chiffre dans la chaine sans rien faire
unsigned int NbChiffreChaine(const char* chaine)
{
    const char* pTemp = chaine;
    unsigned int ret = 0;

    while(*pTemp)
    {
        if(isdigit(*pTemp))
            ret++;
        pTemp++;
    }

    return ret;
}

//Fonction faisant le calcul des 3 premiers car
unsigned int RetChiffreMD5(const char* chaine)
{
    //Variable permettant de savoir le nb de no retourne
    double NbRetChiffre = NbChiffreChaine(chaine) ;
    //Nombre à retournet
    unsigned int NbRetTrouve = 0;

    //Force le nb de chiffre à 3 (pas plus, comme t'as dit)
    if(NbRetChiffre > 3)
        NbRetChiffre = 3;

    //Fait un nouveau pointeur afin de le faire "voyager" dans la chaine à la recherche de car.
    const char* pTemp = chaine;

    //Parcours toute la chaine (pas plus loin, sinon ==> BUFFER OVERFLOW :P)
    while( *pTemp )
    {
        //Test si le caractère est un numéro (fonction prédéfinie dans le header "ctype.h")
        if( isdigit(*pTemp) )
        {
            //Transforme le char en int
            char temp = *pTemp;
            int NoRet = atoi( &temp );
           
            NbRetTrouve += pow(10, NbRetChiffre - 1) * NoRet;
            NbRetChiffre--;

            if(NbRetChiffre == 0)
                break;
        }
       
        //Passe au prochain car.
        pTemp++;
    }

    return NbRetTrouve;
}

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Chiffre trouve: " << RetChiffreMD5("dgfedf2df4sdzsd56jku") << endl;
    cin.get();
    return 0;
}



Sinon Joky a utilisé if( (*c > '0') && (*c < '9') ) et moi isdigit(*c) ça revient au même, même si je l'avoue la solution de Joky fait plus "Vrai programmeur" et la mienne "Programmeur du dimanche"

La taupe voit toujours tout (sauf les bugs)
dimanche 19 mars 2006 à 17:24:21 | Re : recuperer les nombres dans une chaine de caractère

vectoriel

 Voila finalement le code que j'ai trouvé et qui marche:

int  x;


  for (x = 0; x < 3; x++) // on initialise le tableau

    tab[x] = 0;

  x = 0;

  while (*str && tab[2] == 0) // on boucle tant que la chaine existe et tant que l'on a pas 3 nombres...

   {

     if (*str >= '0' && *str <= '9')

      {

        tab[x] = *str;

        x++;

      }

     str++; //on remonte la chaine

   }


     printf ("On a trouve 3 nombres : %d, %d et %d \n", tab[0] - '0', tab[1] - '0', tab[2] - '0');

dimanche 19 mars 2006 à 17:29:15 | Re : recuperer les nombres dans une chaine de caractère

Oeil_de_taupe

*str >= '0' && *str <= '9' ==> t'utilises le truc de Joky et pas isdigit. Chuis jaloux

Lol
dimanche 19 mars 2006 à 17:33:41 | Re : recuperer les nombres dans une chaine de caractère

vectoriel

c'est la seule que j'arrive à faire marcher!!

dimanche 19 mars 2006 à 17:37:05 | Re : recuperer les nombres dans une chaine de caractère

Joky

Membre Club
Non faut pas dire que t'arrive pas :p
Faut dire que c'est la meilleure solution :p

Regarde tu parcours une seule fois la chaîne :p
Tandis qu'avec celle de Taupe :)
2 fois :o Bouhhh la honte :o

if(!Meilleur("Joky")) return ERREUR;<



Cette discussion est classée dans : recuperer, caractère, chaine, nombres, md5


Répondre à ce message

Sujets en rapport avec ce message

Ajouter chaine de caractère à une ComboBox SANS les MFC [ par JMGR ] Bon... Tout est dans le titre, non ? HELP...chaine de caractères....en C..défi TP [ par SniPi ] Voici un exercice bien sympatique à faire en C.Je vous passerez le corrigé de ce TP mercredi prochain, en attendant j'aimerais voir ce que vous pensez URGENT : Problème de "cin" [ par monomanahune ] Monomanahune J'ai un petit problème sur un cin.Je souhaiterais rentrer une chaine de caractère en utilisant cinmais je voudrais pouvoir entrer égaleme Parsage de chaine en javascript [ par syl2 ] Bonjour,j'essaye de réaliser une fonction qui va me tester la validité de mon champs nom dans un formulaire HTML. C'est à dire que dans ce champs, je pbme avec chaine de caractère et sscanf (débutant :( ) [ par peyou ] sur une chaine de caractère de la forme "bidule = machin", je voudrais extraire les deux chaines "bidules" et " machin"1/ le nombre d'espace autour du fonction avec séparateur?? [ par tintin72 ] Bonjour,Je voudrai savoir s'il existe une fonction qui lise une chaine de caractères et prenne en argument un caractère séparateur ?ex: char * unePhra Transformation d'un texte en chaine de caractère [ par davidbaum ] Bonjour,Je désire transformer un texte en une chaine de caratère comment dois je faire en c.Merci Recherche et changement [ par davidbaum ] Bonjour je desire rechercher une chaine de caractère comprise entre la chaine "=" et le caractère" et la changer avec une variable predefinit.Merci manipulation desformules logiques : URGENT [ par The_Legacy ] Bonjour, je suis en train de développer un petit programme qui permet d'évaluer des expression logiques telles que ((a et b) ou (c et (non d))).A part Chaine de caractère ! [ par rems14 ] Bonjour, j'ai fais un petit programme qui ne marche pas. POuvais vous me dire ce qui ne marche pas. Je vous explique, je veux demander le prénom de qu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,980 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales