¿Cómo puedo comparar dos cuerdas en c?++?

¿Cómo puedo comparar dos cuerdas en c?++?

Las cadenas se crean de dos maneras principales en C ++: usando un puntero constante o instanciando desde una clase de cadena. La cuerda literal: “He descubierto el tesoro."Se puede construir de las siguientes maneras en C ++:

char str1 [] = "He descubierto el tesoro.";
const char* str2 = "He descubierto tesoro.";
#incluir
String str3 = string ("He descubierto tesoro.");
String str4 = string ("He descubierto tesoro.");

Crear una cadena usando una matriz o el puntero de caracteres constante es la misma forma de crear una cadena. STR3 y STR4 aquí se han creado por instanciación desde la biblioteca de cadenas incluida. Tenga en cuenta que las cotizaciones dobles utilizadas por los literales de cadena en la programación no son las mismas que las utilizadas por un procesador de palabras.

La pregunta es: "¿Cómo puedo comparar dos cuerdas en c++?"El primer consejo es que no compare las cadenas creadas por consejos de personajes constantes. Cuando haces eso, estás comparando los punteros y no la cuerda literal. Entonces, no compare Str1 y Str2 arriba. Si haces eso, estás comparando sus punteros y no sus contenidos.

Para comparar cadenas en C ++, debe comparar las cadenas creadas por la instancia de la biblioteca de cadenas incluida. Así que se pueden comparar Str3 y Str4 arriba, y compararán igual.

Este tutorial explica cómo comparar literales de cadena en C ++, comenzando con la comparación de personajes en C++. La comparación de los caracteres conduce a la comparación de cadenas, aunque los personajes se tratan de manera diferente a las cuerdas, en C++.

Contenido del artículo

  • Comparación de personajes
  • Cadena de objetos de clase
  • Operación de igualdad
  • Menos que, mayor que
  • Menor o igual a, mayor o igual a
  • Conclusión

Comparación de personajes

Los caracteres están realmente representados en la computadora por números. Entonces, al comparar los caracteres, son los números los que se comparan.

El orden para comparar caracteres, que forman literales de cadena, es el siguiente: los dígitos son primero antes de las letras mayúsculas, que vienen antes de las letras minúsculas. Otros personajes como la campana, la pestaña, la tecla ENTER, el $, el &, el [, la barra de retroceso, el , el | y el, se colocan antes o después, o a los intervalos de estos rangos. Comparar caracteres en C ++ utiliza operadores relacionales e igualdad que son:

< meaning, less than
> Significado, mayor que
<= meaning, less than or equal to
> = significado, mayor o igual a
== Significado, igual a
!= significado, no igual a

La clase de cadena también usa estos operadores para comparar literales de cadena.

Nota: Un personaje es soltero y está delimitado por citas individuales.

Cada una de las siguientes dos declaraciones imprime 1, para verdadero:

cout << ('5' < 'E') << endl;
cout << ('E' < 'e') << endl;

Cada una de las siguientes dos declaraciones imprime, 1 para verdadero:

cout << ('E' <= 'E') << endl;
cout << ('E' >= 'E') << endl;

La siguiente declaración imprime 1, para verdadero:

cout << ('e' == 'e') << endl;

La siguiente declaración imprime 1, para verdadero:

cout << ('e' != 'E') << endl;

Cadena de objetos de clase

Después de incluir la biblioteca de cadenas con la inclusión directiva, se puede instanciar un objeto de cadena (construido) en C ++, de las siguientes maneras:

cadena str = "como es? - $ 50,000!";
String str = string ("como es? - $ 50,000!");
String str = string ('h', 'o', 'w', ", 'c', 'o', 'm', 'e', ​​'?', ",'-',",' $ ',' 5 ',' 0 ',', ',' 0 ',' 0 ',' 0 ','!',' \ 0 ');

La cadena literal para estos tres casos son los mismos. Sin embargo, tenga en cuenta el personaje NUL '\ 0', al final del contenido de la matriz.

Ya hay seis caracteres no alfabéticos en esta cadena literal, que son '?ps!'y el espacio ("). Imagine un nuevo diccionario, donde los caracteres no alfabéticos se usan en palabras y respeta el orden (ASCII) mencionado anteriormente. Ya sabes cómo comparar palabras en el diccionario normal. C ++ compara literales de cadena de esa misma manera en este nuevo diccionario.

Recuerde, para comparar literales de cadena en C ++, compare los objetos de cadena representados por sus identificadores.

Operación de igualdad

El operador igual es, == . La sintaxis es:

Stra == STRB

Si el contenido de Stra es el mismo que el contenido de STRB, respetando la carcasa (no ignora el capital y las letras pequeñas), entonces el resultado de la operación es verdadero.

El operador no igual es, != . La sintaxis es:

estrella != STRB

La más mínima diferencia en el contenido, entre Stra y STRB, respetando la carcasa (que no ignora el capital y las letras pequeñas), da como resultado falso, para esta operación.

Considere el siguiente código:

cadena str1 = "$ MoneyA [26]";
cadena str2 = "$ MoneyA [26]";
bool bla = str1 == str2;
cout << blA << endl;
cadena str3 = "$ MoneyA [26]";
cadena str4 = "$ MoneyA [26]";
bool blb = str3 == str4;
cout << blB << endl;

La salida es:

1 // para verdadero
0 // para falso

Las secuencias son las mismas para los literales STR1 y STR2; Entonces, el valor de retorno es verdadero. Las secuencias son como las mismas para los literales STR3 y STR4; Pero una cadena literal tiene texto en minúsculas y el otro tiene texto en mayúsculas; Entonces, el valor de retorno es falso.

El siguiente es el código anterior repetido, pero con "!= "En lugar de" == ".

cadena str1 = "$ MoneyA [26]";
cadena str2 = "$ MoneyA [26]";
bool bla = str1 != str2;
cout << blA << endl;
cadena str3 = "$ MoneyA [26]";
cadena str4 = "$ MoneyA [26]";
Bool BLB = STR3 != str4;
cout << blB << endl;

La salida es:

0 // para falso
1 // para verdadero

Ignorando el caso en comparación

A partir de ahora, C ++ no tiene una función para comparar cadenas, ignorando el caso. La forma de hacerlo es convertir ambas cuerdas en mayúsculas, antes de comparar. La biblioteca de algoritmo tendrá que ser incluida. Esta biblioteca tiene la función transform (), que realiza conversión a mayúsculas. Para la declaración,

String str = "Me encanta $ 1000 US.";

El constructo,

transformar (str.begin (), str.end (), str.begin (), :: toupper);

Convertirá el literal representado por str, a:

"Me encantan los $ 1000 nosotros."

Tenga en cuenta que los caracteres no alfabéticos, como '$', ',.'Y el espacio no cambió (porque no tienen variantes superiores e minúsculas).

El siguiente programa utiliza este esquema, para comparar literales de cadena, ignorando el caso:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cadena str3 = "$ MoneyA [26]";
transformar (str3.begin (), str3.end (), str3.begin (), :: toupper);
cadena str4 = "$ MoneyA [26]";
transformar (str4.begin (), str4.end (), str4.begin (), :: toupper);
bool blb = str3 == str4;
cout << blB << endl;
regresar 0;

La salida es 1, para verdadero, ya que ambas cuerdas ahora están en mayúsculas, cualquier otra cosa es igual.

Menos que, mayor que

estrella < strB

Resultados en verdadero, si el literal de Stra aparecería en el diccionario, antes del de STRB.

Stra> strb

Resultados en verdadero, si el literal de Stra aparecería en el diccionario, después de la de STRB.

El siguiente código devuelve verdadero, porque "wxyz" es menor que "wxyz":

cadena str1 = "wxyz";
cadena str2 = "wxyz";
bool bl = str1 < str2;
cout << bl << endl;

La salida es 1. El siguiente código devuelve verdadero, porque "stuv" es menor que "wxyz":

cadena str1 = "stuv";
cadena str2 = "wxyz";
bool bl = str1 < str2;
cout << bl << endl;

La salida es 1, para verdadero. El siguiente código devuelve falso, porque "wxyz" es igual a "wxyz", y str1 no es menor que str2.

cadena str1 = "wxyz";
cadena str2 = "wxyz";
bool bl = str1 < str2;
cout << bl << endl;

La salida es 0. El siguiente código devuelve verdadero, porque "wxy" es mayor que "bcde":

cadena str1 = "wxy";
cadena str2 = "bcde";
bool bl = str1> str2;
cout << bl << endl;

La salida es 1.

Menor o igual a, mayor o igual a

estrella <= strB

Resulta en verdadero, si el literal de Stra es menor, o resulta ser el mismo (igual a) que el de STRB.

Stra> = strb

Resulta en verdadero, si el literal de Stra es mayor que o es lo mismo (igual a) que el de STRB.

El siguiente código devuelve verdadero, porque "wxyz" es menor o igual a "wxyz":

cadena str1 = "wxyz";
cadena str2 = "wxyz";
bool bl = str1 <= str2;
cout << bl << endl;

La salida es 1. El siguiente código devuelve verdadero, porque "stuv" es menor o igual a "wxyz":

cadena str1 = "stuv";
cadena str2 = "wxyz";
bool bl = str1 <= str2;
cout << bl << endl;

La salida es 1. El siguiente código devuelve verdadero, porque "wxyz" es menor o igual que "wxyz" (y str1 no es menor que str2).

cadena str1 = "wxyz";
cadena str2 = "wxyz";
bool bl = str1 <= str2;
cout << bl << endl;

La salida es 1. El siguiente código devuelve verdadero, porque "wxy" es mayor o igual a "bcde":

cadena str1 = "wxy";
cadena str2 = "bcde";
bool bl = str1> = str2;
cout << bl << endl;

La salida es 1.

Conclusión

Para comparar caracteres en C ++, use la igualdad y los operadores relacionales. Para comparar literales de cadena, todavía use la igualdad y los operadores relacionales, pero para los objetos de la clase de cadena, y no para const char*s. El uso de los operadores para const char*s compara los punteros, y no los literales de cadena.