Como posso comparar duas cordas em C++?

Como posso comparar duas cordas em C++?

Strings são criadas de duas maneiras principais em C ++: usando um ponteiro constante ou instantando de uma classe de string. A corda literal: “Eu descobri tesouro.”Pode ser construído das seguintes maneiras em C ++:

char str1 [] = "Eu descobri tesouro.";
const char* str2 = "Eu descobri tesouro.";
#incluir
string str3 = string ("Eu descobri tesouro.");
string str4 = string ("Eu descobri tesouro.");

Criar uma string usando uma matriz ou o ponteiro de personagem constante, são a mesma maneira de criar uma string. STR3 e STR4 aqui foram criados por instanciação a partir da biblioteca de string incluída. Observe que as citações duplas usadas por literais de cordas na programação não são as mesmas que as usadas por um processador de texto.

A questão é: “Como posso comparar duas cordas em C++?O primeiro conselho é que não compara as seqüências criadas por constantes ponteiros de caráter. Quando você faz isso, você está comparando os ponteiros e não a corda literal. Então, não compare o STR1 e STR2 acima. Se você fizer isso, você está comparando os ponteiros deles e não o conteúdo deles.

Para comparar strings no C ++, você deve comparar as strings criadas pela instanciação da biblioteca de string incluída. Portanto, STR3 e STR4 acima podem ser comparados e eles comparam iguais.

Este tutorial explica como comparar string literais em C ++, começando com a comparação de caracteres em C++. A comparação de caracteres leva à comparação de cordas, embora os caracteres sejam tratados de maneira diferente das cordas, em c++.

Conteúdo do artigo

  • Comparação de personagens
  • String classe Objetos
  • Operação de igualdade
  • Menos do que maior que
  • Menor ou igual a, maior ou igual a
  • Conclusão

Comparação de personagens

Os caracteres são realmente representados no computador por números. Então, ao comparar caracteres, são os números que são comparados.

A ordem para comparar caracteres, que formam string literais, é a seguinte: dígitos vêm primeiro antes das letras maiúsculas, que vêm antes das letras minúsculas. Outros personagens como o sino, a guia, a tecla Enter, o $, o &, o [, a barra de barra. Comparando caracteres no C ++ usa operadores relacionais e de igualdade que são:

< meaning, less than
> Significado, maior que
<= meaning, less than or equal to
> = significado, maior ou igual a
== Significado, igual a
!= significado, não igual a

A classe String também usa esses operadores para comparar literais de string.

Observação: Um personagem é solteiro e é delimitado por citações únicas.

Cada uma das duas declarações a seguir imprime 1, para verdadeiro:

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

Cada uma das duas declarações a seguir impressa, 1 para verdadeiro:

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

A declaração a seguir imprime 1, para verdadeiro:

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

A declaração a seguir imprime 1, para verdadeiro:

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

String classe Objetos

Depois de incluir a biblioteca de string com o incluído diretivo, um objeto de string pode ser instanciado (construído) em C ++, das seguintes maneiras:

string str = "Como é? - US $ 50.000!";
string str = string ("como é? - US $ 50.000!");
string str = string ('h', 'o', 'w', ", 'c', 'o', 'm', 'e', ​​'?', ",'-',",' $ ',' 5 ',' 0 ',', ',' 0 ',' 0 ',' 0 ','!',' \ 0 ');

A corda literal para esses três casos é a mesma. No entanto, observe o caractere nu '\ 0', no final do conteúdo da matriz.

Já existem seis caracteres não alfabéticos nesse literal de cordas, que são '?',' $ ','-',', ','!'E o espaço ("). Imagine um novo dicionário, onde caracteres não alfabéticos são usados ​​em palavras e respeita a ordem (ASCII) mencionada acima. Você já sabe como comparar palavras no dicionário normal. C ++ compara literais de cordas da mesma maneira neste novo dicionário.

Lembre -se, para comparar string literais em C ++, compare os objetos da string representados por seus identificadores.

Operação de igualdade

O operador igual a para, == . A sintaxe é:

stra == strb

Se o conteúdo de Stra for o mesmo que o conteúdo do STRB, respeitando a carcaça (não ignorando capital e letras pequenas), o resultado da operação é verdadeiro.

O operador não equal para, != . A sintaxe é:

stra != strb

A menor diferença no conteúdo, entre Stra e STRB, respeitando a carcaça (não ignorando capital e letras pequenas), resulta em False, para esta operação.

Considere o seguinte código:

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

A saída é:

1 // para verdadeiro
0 // para falso

As seqüências são as mesmas para os literais STR1 e STR2; Então, o valor de retorno é verdadeiro. As seqüências são como as mesmas para os literais STR3 e STR4; Mas uma corda literal tem texto minúsculo e o outro possui texto em maiúsculas; Então, o valor de retorno é falso.

A seguir, o código acima é repetido, mas com “!= ”Em vez de“ == ”.

string str1 = "$ moneya [26]";
string str2 = "$ moneya [26]";
bool bla = str1 != str2;
cout << blA << endl;
string str3 = "$ moneya [26]";
string str4 = "$ moneya [26]";
bool blb = str3 != str4;
cout << blB << endl;

A saída é:

0 // para falso
1 // para verdadeiro

Ignorando o caso em comparação

A partir de agora, o C ++ não tem função para comparar strings, ignorando o caso. A maneira de fazer isso é converter as duas seqüências em maiúsculas, antes de comparar. A biblioteca de algoritmo terá que ser incluída. Esta biblioteca possui a função transform (), que faz conversão para maiúsculas. Para a declaração,

string str = "eu amo $ 1000 US.";

O construto,

Transform (str.BEGIN (), STR.end (), str.begin (), :: toupper);

Virará o literal representado por STR, para:

"Eu amo US $ 1000 nos."

Observe que caracteres não alfabéticos, como '$', '.'E o espaço não mudou (porque eles não possuem variantes superior e minúsculo).

O programa a seguir usa esse esquema, para comparar literais de strings, ignorando o caso:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

string str3 = "$ moneya [26]";
Transform (STR3.BEGIN (), STR3.end (), str3.begin (), :: toupper);
string str4 = "$ moneya [26]";
Transform (STR4.BEGIN (), STR4.end (), str4.begin (), :: toupper);
bool blb = str3 == str4;
cout << blB << endl;
retornar 0;

A saída é 1, para verdade, já que ambas as cordas estão agora em maiúsculas, todas as outras coisas sendo iguais.

Menos do que maior que

stra < strB

Resulta em verdadeiro, se o literal de Stra aparecesse no dicionário, antes do de STRB.

STRB

Resulta em verdadeiro, se o literal de Stra aparecesse no dicionário, depois do de STRB.

O código a seguir retorna true, porque "wxyz" é menor que "wxyz":

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

A saída é 1. O código a seguir retorna true, porque "Stuv" é menor que "Wxyz":

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

A saída é 1, para verdadeiro. O código a seguir retorna false, porque "wxyz" é igual a "wxyz" e str1 não é menor que o str2.

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

A saída é 0. O código a seguir retorna true, porque "wxy" é maior que "bcde":

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

A saída é 1.

Menor ou igual a, maior ou igual a

stra <= strB

Resulta em verdadeiro, se o literal de stra for menor que ou por acaso é o mesmo (igual ao) que o de strb.

stra> = strb

Resulta em verdadeiro, se o literal de stra for maior que ou for o mesmo (igual ao) que o de strb.

O código a seguir retorna true, porque "wxyz" é menor ou igual a "wxyz":

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

A saída é 1. O código a seguir retorna true, porque "Stuv" é menor ou igual a "Wxyz":

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

A saída é 1. O código a seguir retorna true, porque "wxyz" é menor ou igual a "wxyz" (e str1 não é menor que str2).

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

A saída é 1. O código a seguir retorna true, porque "wxy" é maior ou igual a "bcde":

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

A saída é 1.

Conclusão

Para comparar caracteres em C ++, use os operadores de igualdade e relacional. Para comparar literais de string, ainda use a igualdade e os operadores relacionais, mas para objetos da classe String, e não para const char*s. Usando os operadores para const char*s compara os ponteiros, e não os literais de cordas.