HOWTO · C++

Zählen Sie die Anzahl der Stellen in einer Zahl in C++

Dieser Artikel beschreibt, wie die Anzahl der Stellen in einer C++-Zahl gezählt wird

Auf dieser Seite

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