Contare il numero di cifre in un numero in C++
-
Usa le funzioni
std::to_string
estd::string::size
per contare il numero di cifre in un numero in C++ -
Usa i metodi
std::string::erase
estd::remove_if
per 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
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