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
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 thanA 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.