begin process at 2012 05 27 13:30:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ALTERNATIVE À LA FONCTION ITOA

ALTERNATIVE À LA FONCTION ITOA


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :itoa, conversion, int, vers, char Niveau :Débutant Date de création :04/11/2003 Date de mise à jour :01/12/2005 21:18:36 Vu :12 069

Auteur : Pamaury

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Ce petit code est une alternative à itoa qui à ma connaissance n'est pas présent dans tous les include des compilo

Source

  • #include <math.h>
  • #define _itoa(a,b,c) __itoa(a,b,c,32)
  • int __itoa(int num,char *result,int base,int nbrNum)
  • {
  • int j=0;
  • int i=0;
  • int k=0;
  • int l=0;
  • int temp;
  • char res[32];
  • char res2[nbrNum+1];
  • char cList[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  • if(result==NULL || base>16 || base<2)return -1;
  • j=num;
  • i=31;
  • while(i>=0)
  • {
  • l=pow(base,i);
  • temp=(int)j/l;
  • res[k++]=cList[temp];
  • j-=temp*l;
  • i--;
  • }
  • i=0;
  • j=31-(nbrNum-1);
  • for(k=j;k<32;k++)res2[i++]=res[k];
  • res2[nbrNum]='\0';
  • printf("res2=%s \n",res2);
  • memcpy(result,res2,sizeof(res2));
  • return 0;
  • }
#include <math.h>

#define _itoa(a,b,c) __itoa(a,b,c,32)

int __itoa(int num,char *result,int base,int nbrNum)
{
int j=0;
int i=0;
int k=0;
int l=0;
int temp;
char res[32];
char res2[nbrNum+1];
char cList[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
if(result==NULL || base>16 || base<2)return -1;
j=num;
i=31;
while(i>=0)
	{
	l=pow(base,i);
	temp=(int)j/l;
	res[k++]=cList[temp];
	j-=temp*l;
	i--;
	}
i=0;
j=31-(nbrNum-1);
for(k=j;k<32;k++)res2[i++]=res[k];

res2[nbrNum]='\0';
printf("res2=%s \n",res2);
memcpy(result,res2,sizeof(res2));
return 0;
}

 Conclusion

Ce code  a été testé sous windows Me et seulement avec quelques valeurs .
Il existe deux fonctions : la première dont les param sont : le nombre(int),le pointeur vers une string(char *)et la base(int) .
La deuxièmre fonction qui est en faite la première avec un param de plus et qui est le nombre de caractères à garder dans la string .

ATTENTION : la string renvoyée doit contenir un char de plus que le nombre de char gardé car la fonction ajoute le NULL de la fin de la string


 Historique

01 décembre 2005 21:18:36 :
ajout des mot-clés

 Sources du même auteur

Source avec Zip Source avec une capture UTILISER L'INTERFACE D'UNE DLL DANS UNE MDI[SANS MFC][DEV-C+...
Source avec Zip SAUVEGARDER/RESTAURER DES CLASSES
Source avec Zip Source avec une capture CHANGER L'ICÔNE D'UN EXÉCUTABLE[C++/DEV-CPP]
Source avec Zip HÉRITAGE,MÉTHODES VIRTUELLES ET CLASSES ABSTRAITES
Source avec Zip Source avec une capture REPRÉSENTATION 3D QU'UNE FONCTION A DEUX INCONNUES

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML par pgl10
ITOA FAIT MASION: COVERSION ENTIER 32 BIT NON SIGNE VERS CHA... par xtremejames183
Source avec Zip ÉCRITURE DE ITOA par thomwebster
Source avec Zip Source avec une capture IMPLÉMENTATION DE LA GESTION STANDARD DES CHAINES DE CARACTÈ... par buno

Commentaires et avis

Commentaire de Xs le 04/11/2003 23:30:06

Ca m'a l'air bien lent comme fct.
Perso, je ne l'ai jamais essayé, mais je pense que ma méthode est bcp plus rapide mais marche que sous win.
Je posterai sa demain.

Commentaire de kimmelf2 le 06/11/2003 03:37:42

un algo qui n'utilise pas les puissances :

char HEX[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

cpt=0;
x=valeur a convertir

tant que (x&gt;0)
    y=x
    x=(int)y/base
    reste=y-x*base
    chaine[cpt]=HEX[reste]
    cpt++
fin tant que
chaine[cpt]=0 // caractere de fin de chaine a pas oublier
inverse le sens de chaine

exemple : convertir 38 vers la base 3
x=38, base=3, cpt=0
-1er passage-
y=x=38
x=(int)38/3 = (int)12.33333 = 12
r=38-12*3 = 38-36 = 2
chaine[0]='2' =&gt; chaine="2"
cpt++ =&gt; cpt=1

-2e-
y=x =&gt; 12
x=(int)12/3=4
r=12-4*3=0
chaine[1]='0' =&gt; chaine="20"
cpt=2

-3e-
y=x=&gt;4
x=(int)4/3=1
r=4-1*3=1
chaine[2]='1' =&gt; chaine="201"
cpt=3

-4e-
y=x=&gt;1
x=(int)1/3=0
r=1-0*3=1
chaine[3]='1'=&gt;chaine="2011"
cpt=4

------x=0 donc on quitte la boucle-------

chaine[4]=0 =&gt; chaine = "2011"
on retourne chaine : chaine="1102" qui est bien la connv en base 3 de 38 :
2*3^0 + 0*3^1 + 1*3^2 + 1*3^3 =
2*1 + 0*3 + 1*9 + 1*27 =
2+9+27 = 38

CQFD

Commentaire de Kirua le 06/11/2003 18:32:03

pour un paramètre par défaut, pas la peine d'utiliser les macro du préprocesseur comme tu l'as fait

#define _itoa(a,b,c) __itoa(a,b,c,32)

il te suffit de faire ceci dans la déclaration de ta fonction:

int __itoa(int num,char *result,int base,int nbrNum = 32)

tu vois, le dernier paramètre, si tu n'en passes pas lors de l'appel de la fonction, 32 sera utilisé.

une autre possibilité, mais qui sied moins ds ce cas-ci, aurait été la surcharge (définir plusieurs prototypes de fonctions de même nom, avec un nombre de paramètres différents, l'une appelant l'autre)

Commentaire de kimmelf2 le 07/11/2003 02:21:34

pour info, mon algo fonctionnais nickel et rapidement y'a 10 ans sur un MO6 avec un vieux basic 1.0 donc ca devaris pas poser de pb de perf maintenant ! ;-)

Commentaire de garslouche le 07/11/2003 09:53:07

Ca fait qq temps que je n'y ai plus touché mais pour autant que je me souvienne les algo génétiques utilisent davantage de notions normalement. Ici tu n'utilises que les mutations, mais il y avait une histroire de cross-bidule et de je ne sais quoi encore. Il me semble qu'il y a avait 3 types d' &lt;&lt;erreurs&gt;&gt; possibles. De plus je ne vois pas le taux de mutation ds ton prog.
Sinon je trouve ça un peu bizarre que le mutations ne soient pas utilisées pendant la "procréation" (càd dans l'opérateur *)

Sinon j'ai pas pu testé bicoz j'ai pas un linux sous la main mais d'après la capture d'écran ça a l'air assez efficace.

Sinon pour Kirua : la force brute est toujours la + mauvaise solution!!! (sauf pour trouver un mot de passe....). Et même si dans un cas particulier ça marche mieux (par exemple quand il y a peu de villes à traverser) il ne faut pas en tenir compte car la vitesse des algos se calcule généralement dans le cas des très grand ensembles.


Sinon c'est bien codé mais pas assez commenté...8/10

Commentaire de Kirua le 07/11/2003 23:23:19

lol, c pas grave garlouche, l'algo de génétique c'est de l'autre côté, on t'en veut pas ;-)

Commentaire de garslouche le 08/11/2003 01:17:55

Eh mais j'avais posté un message d'excuses qd je m'étais rendu compte de mon erreur...où qu'il est passé ???

Bon bah encore désolé

Commentaire de kimmelf2 le 08/11/2003 02:13:36

faut pas lire plusieurs sources en meme temps !!!

;-D

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Conversion int -> char * [ par Xentor ] Bonjour tout le monde, et merci de lire mon message parce que je suis un vrai débutant !Je voudrais savoir comment convertir un entier en tableau de c conversion de char en int [ par magicoz ] Bonjour,Est-ce qu'il y aurait quelqu'un qui pourrait me dire comment convertir un caractère en un entier ? Un prog assez simple à réaliser, car les sc conversion int en char* [ par arwenita ] Encore un petit problème en C++...Dans mon programme, je voudrais afficher une liste de nombres (premiers), que je récupère de la fonction Crible(n).L conversion int en char [ par Adri_52 ] Conversion int 2 char [ par DeadStarXt ] Bonjour, Voila, je souhaiterai convertir un entier en chaine de caract&#232;re pour l'afficher apr&#232;s manipulation de cette chaine. Coment faire Conversion handle en char* ou int [ par unrealgun ] Bonjour,Je voudrais savoir comment convertir un type HWND en CHAR*.j'aimerais savoir s'il y a une fonction style itoa (pour conv. un int en char*) mai Conversion de char en int ? [ par jnbrunet ] Salut,Je débute en c++... dans mon programme j'aimerai additionner les valeurs entrées en argument dans le main (argv). Le problème est que la variabl C++ Conversion d'un int en const char* [ par jderf ] Bonjour, Je récupere d'une boîte de dialogue l'index du choix fait. Je souhaite afficher cette valeur dans un message box. Voici mon code Uint Choi Erreur C4430 (besoin d'aide) [ par lui88 ] Bonjour , une erreur est apparu dans mon code error c4430:spécificateur de type manquant - int est pris en compte par défaut.remarque: C++ ne prend pa Passer un tableau de char en paramètre [ par DeadStar117 ] Bonjour,Je cherche à passer des tableaux de char en paramètre à mes procédure mais je n'y arrive pas.Voila un exemple de code:GestionArbre GeAr;<font


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 1,108 sec (3)

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