Compter le nombre de chiffres dans un nombre en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les fonctions std::to_string et std::string::size pour compter le nombre de chiffres dans un nombre en C++
  2. Utilisez les méthodes std::string::erase et std::remove_if pour compter pour compter le nombre de chiffres dans un nombre en C++
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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Integer