HOWTO · C++

Vergleichen von zwei Zeichenketten Ignorieren des Falls in C++

Dieser Artikel führt ein, wie man zwei Zeichenketten vergleicht, während der Fall in C++ ignoriert wird

Auf dieser Seite

In diesem Artikel werden mehrere Methoden demonstriert, wie zwei Zeichenketten verglichen werden können, während die Groß-/Kleinschreibung von Buchstaben in C++ ignoriert wird.

Verwenden Sie die Funktion strcasecmp, um zwei Zeichenketten zu vergleichen und dabei die Groß-/Kleinschreibung zu ignorieren

strcasecmp ist die C-Standardbibliotheksfunktion, die mit dem Header <cstring> in die C++-Quelldatei aufgenommen werden kann. Die Funktion selbst arbeitet auf einer Byte-für-Byte-Basis und gibt eine ganze Zahl kleiner oder gleich oder größer als 0 zurück, wie entsprechende Zeichenketten auswerten.

Wenn nämlich die beiden ignorierten Zeichenketten gleich sind, ist der Rückgabewert Null. In anderen Szenarien werden, wenn die ersten unterschiedlichen Zeichen gefunden werden, diese mit den Werten an ihrer Alphabetposition verglichen und das entsprechende Ergebnis zurückgegeben.

#include <cstring>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text1 = "Hey! Mr. Tambourine man, play a song for me";
  string text2 = "hey! Mr. Tambourine man, PLAY a song for me";
  string text3 = "Hey! Mrs. Tambourine man, play a song for me";

  if (strcasecmp(text1.c_str(), text2.c_str()) == 0) {
    cout << "strings: text1 and text2 match." << endl;
  } else {
    cout << "strings: text1 and text2 don't match!" << endl;
  }

  if (strcasecmp(text1.c_str(), text3.c_str()) == 0) {
    cout << "strings: text1 and text3 match." << endl;
  } else {
    cout << "strings: text1 and text3 don't match!" << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

strings: text1 and text2 match.
strings: text1 and text3 don't match!

Verwenden Sie die Funktion strncasecmp, um zwei Zeichenketten zu vergleichen, die den Fall ignorieren

strncasecmp ist eine weitere Variante der obigen Funktion, die verwendet werden kann, um eine gegebene Anzahl von Zeichen aus zwei Zeichenketten zu vergleichen, indem der Fall ignoriert wird. Die Funktion nimmt den ganzzahligen Wert für die maximale Anzahl von Zeichen, die verglichen werden müssen, aus dem ersten Zeichen. Das folgende Beispiel zeigt, wie die ersten 5 Zeichen von zwei Zeichenketten verglichen werden können, wobei die Groß-/Kleinschreibung ignoriert wird.

#include <cstring>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

constexpr int BYTES_TO_COMPARE = 5;

int main() {
  string text1 = "Hey! Mr. Tambourine man, play a song for me";
  string text3 = "hey! Mrs. Tambourine man, PLAY a song for me";

  if (strncasecmp(text1.c_str(), text3.c_str(), BYTES_TO_COMPARE) == 0) {
    printf("The first %d characters of strings: text1 and text3 match.\n",
           BYTES_TO_COMPARE);
  }

  return EXIT_SUCCESS;
}

Ausgabe:

The first 5 characters of strings: text1 and text3 match.

Verwenden Sie die benutzerdefinierte Funktion toLower und den Operator ==, um zwei Zeichenketten zu vergleichen, wobei die Groß-/Kleinschreibung ignoriert wird

Alternativ können wir Zeichenketten in den gleichen Fall konvertieren und dann einen einfachen ==-Operator zum Vergleich verwenden. Als willkürliche Wahl bietet dieses Beispiel die Absenkung beider Zeichenketten mit einer benutzerdefinierten Funktion, die das String-Objekt zurückgibt. Schließlich kann die if-Anweisung den Vergleichsausdruck enthalten.

#include <cstring>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

std::string toLower(std::string s) {
  std::transform(s.begin(), s.end(), s.begin(),
                 [](unsigned char c) { return std::tolower(c); });
  return s;
}

int main() {
  string text1 = "Hey! Mr. Tambourine man, play a song for me";
  string text2 = "Hey! Mr. Tambourine man, play a song for me";
  string text3 = "Hey! Mrs. Tambourine man, play a song for me";

  if (toLower(text1) == toLower(text2)) {
    cout << "strings: text1 and text2 match." << endl;
  } else {
    cout << "strings: text1 and text2 don't match!" << endl;
  }

  if (toLower(text1) == toLower(text3)) {
    cout << "strings: text1 and text3 match." << endl;
  } else {
    cout << "strings: text1 and text3 don't match!" << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

strings: text1 and text2 match.
strings: text1 and text3 don't match!