Mettre

Résolu
Weedy_59 Messages postés 10 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 21 décembre 2004 - 27 nov. 2004 à 13:21
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 - 30 nov. 2004 à 06:34
Bonjour, j'aimerai savoir comment pourrait on faire pour connaître la taille d'une variable long (pas en octets) du genre : 'long taille= 1256' et moi j'aimerai juste récupérer 4 pour dire qu'il y a 4 caractères. J'ai essayé de placer le long dans un tableau mais ça ne marche pas trop bien, ou alors je m'y prend mal. Merci de m'aider :big)

10 réponses

cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
27 nov. 2004 à 14:18
Tu divises ton nombre par 10 puis tu prend le la partie entière que tu divises par 10 ... jusqu'à ce que ton résultat soit inférieur à 10 et supérieur à un. nombre de division par 10+1=le nombre que tu cherches. Mais il y a peut-être mieux ?!

A+
3
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
27 nov. 2004 à 14:14
salut,

ce code devrait résoudre ton probleme ... si j'ai bien compris !
#include <sstream>
#include 
#include <string>
using namespace std;

int main(int argc,char** argv)
{
    long a = 1234;
    ostringstream ost;
    ost << a;
    string s = ost.str();
    cout << s.size() << endl;
    return 0;
}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 nov. 2004 à 15:02
9 comparaisons avec sortie immediate suffisent.
La comparaison s'effectue en 1 seul cycle processeur, gros benef par rapport a la division.

ciao...
BruNews, MVP VC++
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
28 nov. 2004 à 04:40
une solution plus simple, mettre la valeur de la variable ds une chaine et appeler strlen.
long u=152;
char aa[5];
int i;
_ltoa(u,aa,10);
i=strlen(aa);
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 nov. 2004 à 16:04
char aa[5]; suppose déja que le nombre a moins de 5 chiffres
9 comparaisons, bien sur, je suis d'accord avec BruNews (il y aura juste un ptit problème si on passe à 64 bits, 19 comparaisons dans ce cas
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
29 nov. 2004 à 14:07
la valeur max d1 long signé est 65536 donc il declare char[6] au lieu de char[5] et voila le probleme resolu...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 nov. 2004 à 14:14
le long signe est 31 bits + bit de signe sur processeur 32 bits.

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 nov. 2004 à 17:30
http://brunews.free.fr/TestLen.zip

Projet complet pour comparer perfs entre methode division (itoa) et simple suite de comparaisons.
ASM genere par le compilo est laisse dans dossier release pour verif que boucles bien faites sur les 2 methodes.

La methode par comparaison s'avere de 15 a 17 fois plus rapide que l'autre, c'est sans appel.

STL non testee, trop lent 'by design'.

ciao...
BruNews, MVP VC++
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
29 nov. 2004 à 23:27
BruNews> C'est un peu normal que la méthode par comparaison soit plus rapide !
en fait tu compare un peu les choux et les carottes :), y a un algo qui a pour but premier de convertir un long en chaine de caractère, pas l'autre !

Si on veut faire beaucoup d'opérations de ce type et qu'on a un souci de performance, il ne faut pas convertir en chaine de caractere, puis prendre la longueur, c'est évident.
On pourra à ce moment la manipuler directement les bits du long, ça devrait etre nettement meilleur que la comparaison.
Par contre, si ce n'est utilisé qu'une fois dans un programme,que ça n'affecte en rien les performances (à mon avis, cela correspond à la plupart des cas), un coup de stringstream en C++ ou une fonction genre itoa() suffiront laaargement !
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
30 nov. 2004 à 06:34
d'abord 1e petite correction de ce que j'ai ecrit 'la val max d1 long signe est de l'ordre de 2,1Milliard et non pas 65536' erreur de calcul:)...
++fab>C exactement ce que Gvoulu dire a brunews, je pense qu'il sera plus benefic pr 'weedy' d'ecrire qq 3lignes de codes(itoa) pr regler ce truc au lieu d'ecrire 23 lignes (comparaison) pr avoir le meme resultat avec une difference de rapidite ki ne sera pas remarke lors de lexecution...
brunews>tu as publie le code de ta bib bnprecis qq part?si oui j'aime bien avoir 1lien d'ou je peux la telecharger.
0
Rejoignez-nous