Anzahl der Vorkommen eines Zeichens in String C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die iterative Methode, um das Auftreten eines Zeichens in einer Zeichenkette zu zählen
  2. Verwenden Sie die Funktion std::tolower, um das Auftreten von Zeichen unabhängig von der Groß- und Kleinschreibung zu zählen
Anzahl der Vorkommen eines Zeichens in String C++

In diesem Artikel werden verschiedene Methoden zum Zählen des Auftretens eines Zeichens in einer Zeichenkette C++ erläutert.

Verwenden Sie die iterative Methode, um das Auftreten eines Zeichens in einer Zeichenkette zu zählen

Die C++-String-Bibliothek bietet eine std::string-Klasse, mit der char-ähnliche Objektsequenzen gespeichert und bearbeitet werden können. Es bietet mehrere Methoden zum Suchen und Finden des angegebenen Zeichens oder einer TeilZeichenkette in der Zeichenkette. In diesem Fall müssen wir jedoch jedes Zeichen überprüfen, damit es einfacher ist, eine Funktion zu implementieren, die die Zeichenkette durchläuft, während die Variable count erhöht wird . Diese Funktion verwendet ein Zeichenkette-Objekt als Referenz und ein Zeichen nach Wert, um die Vorkommen zu zählen. Beachten Sie jedoch, dass diese Version die Großbuchstaben nicht von den unteren unterscheidet, sodass sie nicht verwendet werden kann, wenn die Zählung sowohl obere als auch untere Zeichen enthalten soll.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

size_t countOccurrences(char c, string &str) {
  size_t count = 0;

  for (char i : str)
    if (i == c) count++;

  return count;
}

int main() {
  char ch1 = 'e';
  char ch2 = 'h';
  string str1("hello there, how are you doing?");
  string str2("Hello there! How are you doing?");

  cout << "number of char - '" << ch1
       << "' occurrences = " << countOccurrences(ch1, str1) << endl;
  cout << "number of char - '" << ch2
       << "' occurrences = " << countOccurrences(ch2, str2) << endl;

  exit(EXIT_SUCCESS);
}

Ausgabe:

number of char - 'e' occurrences = 4
number of char - 'h' occurrences = 1

Verwenden Sie die Funktion std::tolower, um das Auftreten von Zeichen unabhängig von der Groß- und Kleinschreibung zu zählen

Eine andere Methode zum Implementieren des vorherigen Beispiels besteht darin, die Funktion countOccurrences neu zu schreiben, um die konvertierten Werte der Zeichen bei jeder Iteration zu vergleichen. Beachten Sie, dass die Verwendung von std::tolower insofern schwierig ist, als das einzige Argument char als vorzeichenloses Zeichen dargestellt werden muss. Andernfalls ist das Verhalten undefiniert. Daher übergeben wir den Wert für die Umwandlung von unsigned char an die Funktion tolower und wandeln ihn dann wieder in char um, um ihn in einer temporären Variablen - tmp - zu speichern. Zusätzlich rufen wir bei jeder Iteration die Funktion tolower auf, um die Zeichenketten für die Vergleichsanweisung in Kleinbuchstaben umzuwandeln. Beachten Sie, dass das folgende Codebeispiel die Zeichen in Groß- und Kleinbuchstaben unterscheiden und alle zählen kann.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

size_t countOccurrences(char c, string &str) {
  size_t count = 0;
  char tmp = static_cast<char>(tolower(static_cast<unsigned char>(c)));

  for (char i : str)
    if (tolower(static_cast<unsigned char>(i)) == tmp) count++;

  return count;
}

int main() {
  char ch1 = 'e';
  char ch2 = 'h';
  string str1("hello there, how are you doing?");
  string str2("Hello there! How are you doing?");

  cout << "number of char - '" << ch1
       << "' occurrences = " << countOccurrences(ch1, str1) << endl;
  cout << "number of char - '" << ch2
       << "' occurrences = " << countOccurrences(ch2, str2) << endl;

  exit(EXIT_SUCCESS);
}

Ausgabe:

number of char - 'e' occurrences = 4
number of char - 'h' occurrences = 3
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++ Char