Hvordan kan jeg sammenligne to strenger i C++?

Hvordan kan jeg sammenligne to strenger i C++?

Strenger er opprettet på to hovedveier i C ++: Bruke en konstant peker eller instantiering fra en strengklasse. Strengen bokstavelig, “Jeg har oppdaget skatt.”Kan konstrueres på følgende måter på C ++:

char str1 [] = "Jeg har oppdaget skatt.";
const char* str2 = "Jeg har oppdaget skatt.";
#inkludere
String str3 = streng ("Jeg har oppdaget skatt.");
String str4 = streng ("Jeg har oppdaget skatt.");

Opprette en streng ved hjelp av en matrise eller den konstante tegnpekeren, er på samme måte å lage en streng. STR3 og STR4 her er blitt opprettet ved instantiering fra det inkluderte strengbiblioteket. Merk at de doble sitatene som brukes av strenglitteraler i programmering ikke er de samme som de som brukes av en tekstbehandler.

Spørsmålet er: "Hvordan kan jeg sammenligne to strenger i C++?”Det første rådet er som ikke sammenligner strenger som er opprettet av konstante karakterpekere. Når du gjør det, sammenligner du pekerne og ikke strengen bokstavelig. Så sammenligner ingen str1 og str2 ovenfor. Hvis du gjør det, sammenligner du pekerne og ikke innholdet.

For å sammenligne strenger i C ++, må du sammenligne strengene som er opprettet ved instantiering av det inkluderte strengbiblioteket. Så str3 og str4 ovenfor kan sammenlignes, og de vil sammenligne like.

Denne opplæringen forklarer hvordan du kan sammenligne strenglitteraler i C ++, som begynner med sammenligningen av tegn i C++. Sammenligningen av tegn fører til sammenligning av strenger, selv om tegn blir behandlet annerledes enn strenger, i C++.

Artikkelinnhold

  • Sammenligning av tegn
  • Strengklasseobjekter
  • Likestilling
  • Mindre enn, større enn
  • Mindre enn eller lik, større enn eller lik
  • Konklusjon

Sammenligning av tegn

Tegn er faktisk representert i datamaskinen etter tall. Så når du sammenligner tegn, er det tallene som sammenlignes.

Bestillingen for å sammenligne tegn, som danner strenglitteraler, er som følger: Sifre kommer først før store bokstaver, som kommer før små bokstaver. Andre tegn som Bell, The Tab, Enter -tasten, $, The &, [, The Backslash, , |, og, er plassert før eller etter, eller med intervallene til disse områdene. Sammenligning av tegn i C ++ bruker relasjonelle og likestillende operatører som er:

< meaning, less than
> mening, større enn
<= meaning, less than or equal to
> = mening, større enn eller lik
== Betydning, lik
!= mening, ikke lik

Strengklassen bruker også disse operatørene for å sammenligne strenglitteraler.

Merk: En karakter er singel og den er avgrenset av enkelt sitater.

Hver av de følgende to utsagnene skriver ut 1, for sant:

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

Hver av de følgende to utsagnutskriftene, 1 for True:

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

Følgende uttalelse skriver ut 1, for sann:

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

Følgende uttalelse skriver ut 1, for sann:

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

Strengklasseobjekter

Etter å ha inkludert strengbiblioteket med det inkluderte regissøren, kan et strengobjekt instantieres (konstruert) i C ++, på følgende måter:

String str = "Hvordan kommer? - 50 000 dollar!";
String str = streng ("Hvordan kommer? - 50 000 dollar!");
String str = String ('h', 'o', 'w', ", 'c', 'o', 'm', 'e', ​​'?',', '-', ", '$', '5', '0', ',', '0', '0', '0', '!',' \ 0 ');

Strengen bokstavelig for disse tre tilfellene er de samme. Legg imidlertid merke til NUL -tegnet '\ 0', på slutten av matriseinnholdet.

Allerede er det seks ikke-alfabetiske tegn i denne strengen bokstavelig, som er '?',' $ ','-',', ','!'Og plassen ("). Se for deg en ny ordbok, der ikke-alfabetiske tegn brukes i ord, og respekterer rekkefølgen (ASCII) nevnt ovenfor. Du vet allerede hvordan du kan sammenligne ord i normal ordbok. C ++ sammenligner strenglitteraler på samme måte i denne nye ordboken.

Husk at å sammenligne strenglitteraler i C ++, sammenligne strengobjektene som er representert av identifikatorene deres.

Likestilling

Like-til-operatøren er, == . Syntaksen er:

stra == strb

Hvis innholdet i Stra er det samme som innholdet i STRB, respekterer foringsrør (ikke ignorerer kapital og små bokstaver), er resultatet av operasjonen sant.

Den ikke-likevel-til-operatøren er, != . Syntaksen er:

Stra != strb

Den minste forskjellen i innhold, mellom stra og strb, respekterer foringsrør (ikke ignorerer kapital og små bokstaver), resulterer i falsk, for denne operasjonen.

Tenk på følgende kode:

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;

Utgangen er:

1 // for True
0 // for falsk

Sekvensene er de samme for STR1- og STR2 -bokstaver; Så returverdien er sann. Sekvensene er som de samme for STR3 og STR4 litteraler; Men den ene strengen bokstavelig har små tekst, og den andre har store tekst; Så returverdien er falsk.

Følgende er den ovennevnte koden gjentatt, men med "!= ”I stedet for“ == ”.

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;

Utgangen er:

0 // for falsk
1 // for True

Ignorerer sak i sammenligning

Per nå har C ++ ikke en funksjon for å sammenligne strenger, og ignorerer sak. Måten å gjøre dette på er å konvertere begge strengene til store bokstaver, før du sammenligner. Algoritmebiblioteket må inkluderes. Dette biblioteket har Transform () -funksjonen, som gjør konvertering til store bokstaver. For uttalelsen,

String str = "Jeg elsker $ 1000 oss.";

Konstruksjonen,

Transform (str.Begynn (), Str.End (), Str.Begynn (), :: Toupper);

Vil gjøre det bokstavelige representert av STR, til:

"Jeg elsker $ 1000 oss.""

Legg merke til at ikke-alfabetiske tegn, for eksempel '$', '.'Og plassen endret seg ikke (fordi de ikke har øvre og små varianter).

Følgende program bruker dette ordningen, for å sammenligne strenglitteraler, ignorere sak:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

String str3 = "$ moneya [26]";
Transform (STR3.Begynn (), STR3.end (), str3.Begynn (), :: Toupper);
String str4 = "$ Moneya [26]";
Transform (STR4.Begynn (), STR4.slutt (), str4.Begynn (), :: Toupper);
bool blb = str3 == str4;
cout << blB << endl;
retur 0;

Utgangen er 1, for sann, siden begge strengene nå er i store bokstaver, og alle andre ting er like.

Mindre enn, større enn

Stra < strB

Resulterer i sant, hvis den bokstavelige stra ville vises i ordboken, før Strb.

Stra> strb

Resulterer i sant, hvis den bokstavelige stra ville vises i ordboken, etter Strb.

Følgende kode returnerer sann, fordi "WXYZ" er mindre enn "WXYZ":

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

Utgangen er 1. Følgende kode returnerer sann, fordi "STUV" er mindre enn "WXYZ":

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

Utgangen er 1, for sann. Følgende kode returnerer falsk, fordi “WXYZ” er lik “WXYZ”, og STR1 er ikke mindre enn STR2.

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

Utgangen er 0. Følgende kode returnerer sann, fordi "WXY" er større enn "BCDE":

String str1 = "wxy";
String str2 = "BCDE";
bool bl = str1> str2;
cout << bl << endl;

Utgangen er 1.

Mindre enn eller lik, større enn eller lik

Stra <= strB

Resulterer i sant, hvis den bokstavelige stra er mindre enn, eller tilfeldigvis er den samme (lik) som Strb.

stra> = strb

Resulterer i sant, hvis den bokstavelige av stra er større enn, eller tilfeldigvis er den samme (lik) som Strb.

Følgende kode returnerer sann, fordi “WXYZ” er mindre enn eller lik “WXYZ”:

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

Utgangen er 1. Følgende kode returnerer sann, fordi "STUV" er mindre enn eller lik "WXYZ":

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

Utgangen er 1. Følgende kode returnerer sann, fordi “WXYZ” er mindre enn eller lik “WXYZ” (og STR1 er ikke mindre enn STR2).

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

Utgangen er 1. Følgende kode returnerer sann, fordi "WXY" er større enn eller lik "BCDE":

String str1 = "wxy";
String str2 = "BCDE";
bool bl = str1> = str2;
cout << bl << endl;

Utgangen er 1.

Konklusjon

For å sammenligne tegn i C ++, bruk likhet og relasjonelle operatører. For å sammenligne strenglitteraler, bruker du likevel likestilling og relasjonelle operatører, men for objekter i strengklassen, og ikke for const char*s. Bruke operatørene for Const Char*S sammenligner pekerne, og ikke strenglitteraler.