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

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktionen std::to_string und std::string::size, um die Anzahl der Stellen in einer Zahl in C++ zu zählen
  2. Verwenden Sie die Methoden std::string::erase und std::remove_if, um die Anzahl der Stellen in einer Zahl in C++ zu zählen
Zählen Sie die Anzahl der Stellen in einer Zahl in C++

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
Autor: 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

Verwandter Artikel - C++ Integer