Contare il numero di cifre in un numero in C++

Jinku Hu 12 ottobre 2023
  1. Usa le funzioni std::to_string e std::string::size per contare il numero di cifre in un numero in C++
  2. Usa i metodi std::string::erase e std::remove_if per contare il numero di cifre in un numero in C++
Contare il numero di cifre in un numero in C++

Questo articolo illustrerà più metodi su come contare il numero di cifre in un numero C++.

Usa le funzioni std::to_string e std::string::size per contare il numero di cifre in un numero in C++

Il modo più semplice per contare il numero di cifre in un numero è convertirlo nell’oggetto std::string e quindi chiamare una funzione incorporata di std::string per recuperare un numero di conteggio. In questo caso, abbiamo implementato una funzione basata su modelli separata countDigits che accetta un singolo argomento, che si presume sia un tipo intero e restituisce la dimensione come numero intero. Si noti che il seguente esempio restituisce numeri errati per interi negativi poiché conta anche il simbolo del segno.

#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);
}

Produzione:

number of digits in 1234567 = 7
number of digits in -1234567 = 8

Per rimediare al difetto nella precedente implementazione della funzione countDigits, aggiungeremo una singola istruzione if per valutare se il numero dato è negativo e restituire la dimensione della stringa che è uno in meno. Si noti che se il numero è maggiore di 0, viene restituito il valore originale della dimensione della stringa, come implementato nel seguente codice di esempio.

#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);
}

Produzione:

number of digits in 1234567 = 7
number of digits in -1234567 = 7

Usa i metodi std::string::erase e std::remove_if per contare il numero di cifre in un numero in C++

L’esempio precedente fornisce una soluzione del tutto sufficiente per il problema precedente, ma si può sovra-ingegnerizzare il countDigits usando la combinazione di funzioni std::string::erase e std::remove_if per rimuovere qualsiasi simbolo non numerico . Nota anche che questo metodo può essere il trampolino di lancio per implementare una funzione che può funzionare con valori in virgola mobile. Tuttavia, il seguente codice di esempio non è compatibile con i valori a virgola mobile.

#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);
}

Produzione:

number of digits in 1234567 = 7
number of digits in -1234567 = 7
Autore: 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

Articolo correlato - C++ Integer