Vergleichen von zwei Zeichenketten Ignorieren des Falls in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion strcasecmp, um zwei Zeichenketten zu vergleichen und dabei die Groß-/Kleinschreibung zu ignorieren
  2. Verwenden Sie die Funktion strncasecmp, um zwei Zeichenketten zu vergleichen, die den Fall ignorieren
  3. Verwenden Sie die benutzerdefinierte Funktion toLower und den Operator ==, um zwei Zeichenketten zu vergleichen, wobei die Groß-/Kleinschreibung ignoriert wird
Vergleichen von zwei Zeichenketten Ignorieren des Falls in C++

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!
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++ String