Bonjour.
Je débute en C++ et, au risque de poser une question déjà postée(), j'aimerais savoir si il existe une instruction qui renvoi le nombre de caractères d'une variable.
int Mavariable=123;
J'aimerais que l'opérateur me renvoit 3.
Merci.
Bonjour.
Je débute en C++ et, au risque de poser une question déjà postée(), j'aimerais savoir si il existe une instruction qui renvoi le nombre de caractères d'une variable.
int Mavariable=123;
J'aimerais que l'opérateur me renvoit 3.
Merci.
Hello
ça peut se faire simplementÇa peut se faire aussi par une conversion en string (via stringstream par exemple) puis en prenant la taille du string généré. Ca à l'avantage de marcher pour tous les types à virgule (float / double), mais le résultat peut être "bizarre" pour ces types, dû aux erreurs d'approximations.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int nbChar(int n) { int ret = 0; while(n != 0) { n /= 10; ++ret; } return ret; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 template <class T> int nbChar(T n) { std::stringstream ss; ss << n; auto ret = ss.str().size(); return n >= 0 ? ret: ret-1; // ne pas compter le signe moins }
Salut,Pas avec un entier.
Un entier, c'est une valeur et le nombre de caractères qui permettent de représenter cette valeur dépend de la convention utilisée pour représenter la dite valeur.
Or, si l'humain apprécie énormément la convention décimale (dix chiffres, allant de 0 à 9 inclus), il existe d'autres conventions :
Du coup, la valeur 123 peut tout aussi bien être représentée par 1111011 en binaire que par 7B en hexadécimal : Ce sont des représentations différentes de la même valeur qui est composée de 1* 10^2 + 2*10^1 + 3*10^0.
- binaire (deux chiffres 0 et 1) qui correspond à la manière dont les valeurs sont représentées en interne dans un ordinateur (le courent passe ou ne passe pas)
- hexadécimale (16 "symboles" : les dix chiffres (de 0 à 9 inclus) + 6 lettres A, B, C, D, E et F) qui fournit une représentation plus "facilement lisible" que le binaire car regroupant 4 bits pour chaque "symbole" à afficher.
Il n'y a donc pas de "caractères" à proprement parler : il y a une valeur spécifique
Si tu veux pouvoir calculer le nombre de caractères pour représenter une valeur spécifique, tu dois:Ce n'est qu'une fois que cette conversion est faite qu'il te sera possible de vérifier le nombre de caractères qui composent la valeur (numérique) qui t'intéresse
- savoir dans quelle base tu veux obtenir cette représentation (binaire / décimale ou hexadécimale) et
- convertir ta valeur en chaine de caractères qui représente la valeur souhaitée dans une base donnée
PS : et la chose qui va mettre ton cerveau à ébullition, c'est que la valeur qui correspond, au niveau de l'ordinateur, au caractère '1' n'est pas la valeur 1, mais bien la valeur 49 qui correspond à l'indice du caractère '1' dans une table de conversion connue sous le petit nom de "table ASCII"
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Bonjour,
Si je ne m'abuse, le logarithme a base 10 renvoie a un près le résultat que tu attend. Le problème est qu'il va retourner une valeur flottante qu'il faudra convertir en int.
Il y a bien une fonction qui fait ça : c'est la fonction log10 dans <cmath>.
La solution à ton problème serait donc :
Pour plus d'info sur cette fonction mathématique : http://fr.wikipedia.org/wiki/Logarithme_d%C3%A9cimal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include <cmath> //... int nombreDeChiffre(int valeur) { return (int)(log10(float(valeur)) + 1) }
Merci d'avoir répondu, vous m'avez beaucoup aider!
Désolé pour le retard, j'ai des problèmes avec la connexion internet.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager