Anzahl der Vorkommen eines Zeichens in String C++
- Verwenden Sie die iterative Methode, um das Auftreten eines Zeichens in einer Zeichenkette zu zählen
-
Verwenden Sie die Funktion
std::tolower
, um das Auftreten von Zeichen unabhängig von der Groß- und Kleinschreibung zu zählen
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
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