Zählen Sie die Anzahl der Stellen in einer Zahl in C++
-
Verwenden Sie die Funktionen
std::to_string
undstd::string::size
, um die Anzahl der Stellen in einer Zahl in C++ zu zählen -
Verwenden Sie die Methoden
std::string::erase
undstd::remove_if
, um die Anzahl der Stellen in einer Zahl in C++ zu zählen
Dieser Artikel zeigt verschiedene Methoden zum Zählen der Anzahl der Ziffern in einer C++-Zahl.
Verwenden Sie die Funktionen std::to_string
und std::string::size
, um die Anzahl der Stellen in einer Zahl in C++ zu zählen
Der einfachste Weg, die Anzahl der Ziffern in einer Zahl zu zählen, besteht darin, sie in das Objekt std::string
zu konvertieren und dann eine integrierte Funktion der Zahl std::string
aufzurufen, um eine Zählnummer abzurufen. In diesem Fall haben wir eine separate Vorlagenfunktion countDigits
implementiert, die ein einzelnes Argument verwendet, das als Ganzzahltyp angenommen wird und die Größe als Ganzzahl zurückgibt. Beachten Sie, dass im folgenden Beispiel falsche Zahlen für negative Ganzzahlen ausgegeben werden, da auch das Vorzeichensymbol berücksichtigt wird.
#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);
}
Ausgabe:
number of digits in 1234567 = 7
number of digits in -1234567 = 8
Um den Fehler in der vorherigen Implementierung der Funktion countDigits
zu beheben, fügen wir eine einzelne if
-Anweisung hinzu, um zu bewerten, ob die angegebene Zahl negativ ist, und geben die Zeichenkettengröße zurück, die eins weniger ist. Beachten Sie, dass bei einer größeren Zahl als 0
der ursprüngliche Wert der Zeichenkettengröße zurückgegeben wird, wie im folgenden Beispielcode implementiert.
#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);
}
Ausgabe:
number of digits in 1234567 = 7
number of digits in -1234567 = 7
Verwenden Sie die Methoden std::string::erase
und std::remove_if
, um die Anzahl der Stellen in einer Zahl in C++ zu zählen
Das vorige Beispiel bietet eine völlig ausreichende Lösung für das obige Problem, aber man kann die countDigits
mithilfe der Funktionskombination std::string::erase
und std::remove_if
überentwickeln, um alle Nicht-Zahlen-Symbole zu entfernen . Beachten Sie auch, dass diese Methode das Sprungbrett für die Implementierung einer Funktion sein kann, die mit Gleitkommawerten arbeiten kann. Beachten Sie jedoch, dass der folgende Beispielcode nicht mit Gleitkommawerten kompatibel ist.
#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);
}
Ausgabe:
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