Recuperer les nombres dans une chaine de caractère

cs_vectoriel Messages postés 10 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 1 avril 2006 - 19 mars 2006 à 11:26
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 19 mars 2006 à 17:37
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

8 réponses

Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
19 mars 2006 à 13:01
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 .
0
cs_vectoriel Messages postés 10 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 1 avril 2006
19 mars 2006 à 13:23
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
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 mars 2006 à 16:59
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;<
0
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
19 mars 2006 à 17:19
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
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_vectoriel Messages postés 10 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 1 avril 2006
19 mars 2006 à 17:24
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');
0
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
19 mars 2006 à 17:29
*str >= '0' && *str <= '9' ==> t'utilises le truc de Joky et pas isdigit. Chuis jaloux

Lol
0
cs_vectoriel Messages postés 10 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 1 avril 2006
19 mars 2006 à 17:33
c'est la seule que j'arrive à faire marcher!!
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 mars 2006 à 17:37
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;<
0
Rejoignez-nous