Cómo comparar dos cadenas ignorando el caso en C++
-
Usar la función
strcasecmp
para comparar dos cadenas ignorando el caso -
Usar la función
strncasecmp
para comparar dos cadenas ignorando el caso -
Usar la función personalizada
toLower
y el operador==
para comparar dos cadenas ignorando el caso
Este artículo demostrará múltiples métodos sobre cómo comparar dos cadenas ignorando el caso de las letras en C++.
Usar la función strcasecmp
para comparar dos cadenas ignorando el caso
strcasecmp
es la función de la biblioteca estándar de C que puede ser incluida en el archivo fuente de C++ usando el encabezado <cstring>
. La función en sí misma opera sobre una base de byte a byte y devuelve un número entero menor o igual o mayor que 0, según evalúen las cadenas correspondientes.
Es decir, si las dos cadenas ignoradas el caso son iguales, el valor de retorno es cero. En otros escenarios, cuando se encuentran los primeros caracteres diferentes, se comparan con los valores a su posición en el alfabeto, y se devuelve el resultado correspondiente.
#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;
}
Resultado:
strings: text1 and text2 match.
strings: text1 and text3 don't match!
Usar la función strncasecmp
para comparar dos cadenas ignorando el caso
strncasecmp
es otra variación de la función anterior que puede ser utilizada para comparar un número dado de caracteres de dos cadenas ignorando el caso. La función toma el valor entero para el número máximo de caracteres que deben ser comparados desde el primer char
. El siguiente ejemplo demuestra cómo comparar los primeros 5 caracteres de dos cadenas ignorando el caso.
#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;
}
Resultado:
The first 5 characters of strings: text1 and text3 match.
Usar la función personalizada toLower
y el operador ==
para comparar dos cadenas ignorando el caso
Alternativamente, podemos convertir las cadenas al mismo caso y luego usar un simple operador ==
para la comparación. Como elección arbitraria, este ejemplo ofrece la bajada de ambas cadenas con una función definida por el usuario, que devuelve el objeto string
. Finalmente, la sentencia if
puede contener la expresión de comparación.
#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;
}
Resultado:
strings: text1 and text2 match.
strings: text1 and text3 don't match!
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 FacebookArtículo relacionado - C++ String
- Encuentre el primer carácter repetido en una cadena en C++
- Encuentre la subcadena común más larga en C++
- Poner en mayúscula la primera letra de una cadena en C++
- Comparación de cadenas y caracteres en C++
- Eliminar el último carácter de una cadena en C++
- Obtener el último carácter de una cadena en C++