Compter le nombre de chiffres dans un nombre en C++
-
Utilisez les fonctions
std::to_string
etstd::string::size
pour compter le nombre de chiffres dans un nombre en C++ -
Utilisez les méthodes
std::string::erase
etstd::remove_if
pour compter pour compter le nombre de chiffres dans un nombre en C++
Cet article montre plusieurs méthodes sur la façon de compter le nombre de chiffres dans un nombre C++.
Utilisez les fonctions std::to_string
et std::string::size
pour compter le nombre de chiffres dans un nombre en C++
Le moyen le plus simple de compter le nombre de chiffres dans un nombre est de le convertir en objet std::string
puis d’appeler une fonction intégrée de std::string
pour récupérer un nombre de comptage. Dans ce cas, nous avons implémenté une fonction modèle distincte countDigits
qui prend un seul argument, qui est supposé être un type entier et renvoie la taille sous forme d’entier. Notez que l’exemple suivant génère des nombres incorrects pour les entiers négatifs car il compte également le symbole de signe.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;
template <typename T>
size_t countDigits(T n) {
string tmp;
tmp = to_string(n);
return tmp.size();
}
int main() {
int num1 = 1234567;
int num2 = -1234567;
cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;
exit(EXIT_SUCCESS);
}
Production:
number of digits in 1234567 = 7
number of digits in -1234567 = 8
Pour remédier à la faille de l’implémentation précédente de la fonction countDigits
, nous allons ajouter une seule instruction if
pour évaluer si le nombre donné est négatif et retourner la taille de chaîne qui est un de moins. Notez que si le nombre est supérieur à 0
, la valeur d’origine de la taille de chaîne est renvoyée, comme implémenté dans l’exemple de code suivant.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;
template <typename T>
size_t countDigits(T n) {
string tmp;
tmp = to_string(n);
if (n < 0) return tmp.size() - 1;
return tmp.size();
}
int main() {
int num1 = 1234567;
int num2 = -1234567;
cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;
exit(EXIT_SUCCESS);
}
Production:
number of digits in 1234567 = 7
number of digits in -1234567 = 7
Utilisez les méthodes std::string::erase
et std::remove_if
pour compter pour compter le nombre de chiffres dans un nombre en C++
L’exemple précédent fournit une solution entièrement suffisante pour le problème ci-dessus, mais on peut sur-concevoir les countDigits
en utilisant la combinaison des fonctions std::string::erase
et std::remove_if
pour supprimer tous les symboles non numériques . Notez également que cette méthode peut être le tremplin pour implémenter une fonction qui peut fonctionner avec des valeurs à virgule flottante. Attention cependant, l’exemple de code suivant n’est pas compatible avec les valeurs à virgule flottante.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::to_string;
template <typename T>
size_t countDigits(T n) {
string tmp;
tmp = to_string(n);
tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
return tmp.size();
}
int main() {
int num1 = 1234567;
int num2 = -1234567;
cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;
exit(EXIT_SUCCESS);
}
Production:
number of digits in 1234567 = 7
number of digits in -1234567 = 7
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook