Come posso confrontare due stringhe in C++?

Come posso confrontare due stringhe in C++?

Le stringhe sono create in due modi principali in C ++: usando un puntatore costante o istanziante da una classe di stringhe. La corda letterale, “Ho scoperto il tesoro."Può essere costruito nei seguenti modi in C ++:

char str1 [] = "Ho scoperto il tesoro.";
const char* str2 = "Ho scoperto il tesoro.";
#includere
String Str3 = String ("Ho scoperto il tesoro.");
String Str4 = String ("Ho scoperto il tesoro.");

Creazione di una stringa usando un array o il puntatore del carattere costante, sono lo stesso modo per creare una stringa. STR3 e STR4 qui sono stati creati per istanza dalla libreria di stringhe inclusa. Si noti che le doppie citazioni utilizzate dai letterali di stringa nella programmazione non sono uguali a quelle utilizzate da un elaboratore di testi.

La domanda è: “Come posso confrontare due stringhe in c++?"Il primo consiglio è che non confrontano le stringhe create da costante puntatori di personaggi. Quando lo fai, stai confrontando i puntatori e non la corda letterale. Quindi, non confrontare STR1 e STR2 sopra. Se lo fai, stai confrontando i loro puntatori e non il loro contenuto.

Per confrontare le stringhe in C ++, è necessario confrontare le stringhe create per istanza della libreria di stringhe inclusa. Quindi Str3 e Str4 sopra possono essere confrontati e confronteranno uguali.

Questo tutorial spiega come confrontare i letterali delle stringhe in C ++, a partire dal confronto dei personaggi in C++. Il confronto dei personaggi porta al confronto delle stringhe, sebbene i personaggi siano trattati in modo diverso dalle stringhe, in C++.

Contenuto dell'articolo

  • Confronto di personaggi
  • Oggetti di classe stringa
  • Operazione di uguaglianza
  • Meno di, maggiore di
  • Meno o uguale a, maggiore o uguale a
  • Conclusione

Confronto di personaggi

I caratteri sono effettivamente rappresentati nel computer da numeri. Quindi, quando si confrontano i personaggi, sono i numeri che vengono confrontati.

L'ordine per il confronto dei personaggi, che formano letterali a stringa, è il seguente: le cifre vengono prima di lettere maiuscole, che vengono prima delle lettere minuscole. Altri personaggi come il campanello, la scheda, la chiave di inserimento, il $, il &, il [, la retromarcia, il , il | e il, sono posizionati prima o dopo, o agli intervalli di questi gamme. Il confronto dei caratteri in C ++ utilizza operatori relazionali e di uguaglianza che sono:

< meaning, less than
> significato, maggiore di
<= meaning, less than or equal to
> = significato, maggiore o uguale a
== significato, uguale a
!= significato, non uguale a

La classe String utilizza anche questi operatori per confrontare i letterali delle stringhe.

Nota: Un personaggio è single ed è delimitato da singole citazioni.

Ciascuna delle seguenti due dichiarazioni stampano 1, per vero:

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

Ciascuna delle seguenti stampe di due dichiarazioni, 1 per True:

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

La seguente dichiarazione stampa 1, per True:

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

La seguente dichiarazione stampa 1, per True:

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

Oggetti di classe stringa

Dopo aver incluso la libreria di stringhe con direttivo incluso, un oggetto stringa può essere istanziato (costruito) in C ++, nei modi seguenti:

String str = "Come vieni? - $ 50.000!";
String str = String ("Come vieni? - $ 50.000!");
String str = String ('H', 'O', 'W', ", 'C', 'O', 'M', 'E', '?', ",'-',', '$', '5', '0', ',', '0', '0', '0', '!',' \ 0 ');

La stringa letterale per questi tre casi sono uguali. Tuttavia, nota il carattere NUL '\ 0', alla fine del contenuto dell'array.

Già ci sono sei caratteri non alfabetici in questa stringa letterale, che sono "?',' $ ','-',', ','!'e lo spazio ("). Immagina un nuovo dizionario, in cui i caratteri non alfabetici sono usati in parole e rispetta l'ordine (ASCII) menzionato sopra. Sai già come confrontare le parole nel dizionario normale. C ++ confronta i letterali delle stringhe allo stesso modo in questo nuovo dizionario.

Ricorda, per confrontare i letterali delle stringhe in C ++, confronta gli oggetti stringa rappresentati dai loro identificatori.

Operazione di uguaglianza

L'operatore uguale a è, == . La sintassi è:

Stra == strb

Se il contenuto di Stra è uguale al contenuto di STRB, rispettando l'involucro (non ignorando il capitale e le piccole lettere), il risultato dell'operazione è vero.

L'operatore non equal-to è, != . La sintassi è:

Stra != strb

La minima differenza di contenuto, tra ST e STRB, rispetto dell'involucro (non ignorare il capitale e le piccole lettere), si traduce in falso, per questa operazione.

Considera il seguente codice:

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;

L'output è:

1 // per vero
0 // per false

Le sequenze sono le stesse per i letterali STR1 e STR2; Quindi, il valore di ritorno è vero. Le sequenze sono le stesse per i letterali STR3 e STR4; Ma una stringa letterale ha un testo minuscolo e l'altra ha un testo maiuscolo; Quindi, il valore di ritorno è falso.

Quello che segue è il codice sopra ripetuto, ma con "!= "Invece di" == ".

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;

L'output è:

0 // per false
1 // per vero

Ignorare il caso in confronto

A partire da ora, C ++ non ha una funzione per confrontare le stringhe, ignorando il caso. Il modo per farlo è convertire entrambe le stringhe in maiuscolo, prima di confrontare. La libreria dell'algoritmo dovrà essere inclusa. Questa libreria ha la funzione trasform (), che esegue la conversione in maiuscolo. Per la dichiarazione,

String str = "I love $ 1000 US.";

Il costrutto,

trasformazione (str.inizio (), str.end (), str.inizio (), :: toupper);

Trasformerà il letterale rappresentato da STR, a:

"Amo $ 1000 US."

Si noti che personaggi non alfabetici, come "$", ".'E lo spazio non è cambiato (perché non hanno varianti maiuscole e minuscole).

Il seguente programma utilizza questo schema, per confrontare i letterali delle stringhe, ignorando il caso:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

string Str3 = "$ moneya [26]";
trasformazione (STR3.inizio (), str3.end (), str3.inizio (), :: toupper);
string str4 = "$ moneya [26]";
trasformazione (STR4.inizio (), str4.fine (), str4.inizio (), :: toupper);
bool blb = str3 == str4;
cout << blB << endl;
restituzione 0;

L'output è 1, per vero, poiché entrambe le stringhe sono ora in maiuscolo, ogni altra cosa è uguale.

Meno di, maggiore di

Stra < strB

Si traduce in vero, se il letterale di ST apparisse nel dizionario, prima di quello di STRB.

STRA> STRB

Si traduce in vero, se il letterale di ST apparisse nel dizionario, dopo quello di STRB.

Il seguente codice restituisce vero, perché "WXYZ" è inferiore a "WXYZ":

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

L'output è 1. Il seguente codice restituisce vero, perché "Stuv" è inferiore a "WXYZ":

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

L'output è 1, per vero. Il seguente codice restituisce falso, perché "wxyz" è uguale a "wxyz" e STR1 non è inferiore a STR2.

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

L'output è 0. Il seguente codice restituisce vero, perché "WXY" è maggiore di "BCDE":

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

L'output è 1.

Meno o uguale a, maggiore o uguale a

Stra <= strB

Si traduce in vero, se il letterale di ST è inferiore a o è lo stesso (uguale a) di quello di STRB.

Stra> = strb

Si traduce in vero, se il letterale di ST è maggiore di o è lo stesso (uguale a) di quello di STRB.

Il seguente codice restituisce vero, perché "WXYZ" è inferiore o uguale a "WXYZ":

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

L'output è 1. Il seguente codice restituisce vero, perché "Stuv" è inferiore o uguale a "WXYZ":

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

L'output è 1. Il seguente codice restituisce vero, perché "WXYZ" è inferiore o uguale a "WXYZ" (e STR1 non è inferiore a STR2).

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

L'output è 1. Il seguente codice restituisce vero, perché "WXY" è maggiore o uguale a "BCDE":

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

L'output è 1.

Conclusione

Per confrontare i caratteri in C ++, utilizzare l'uguaglianza e gli operatori relazionali. Per confrontare i letterali delle stringhe, utilizzare ancora l'uguaglianza e gli operatori relazionali, ma per gli oggetti della classe di stringhe e non per const char*s. L'uso degli operatori per const char*s confronta i puntatori e non i letterali delle stringhe.