Funcțiile bibliotecii de procesare a șirurilor c. Atribuirea șirurilor. funcția assign(). Exemple. Matrice de șiruri de caractere

Vă rugăm să suspendați AdBlock pe acest site.

Deci, șiruri în limbaj C. Nu există un tip de date separat pentru ele, așa cum se face în multe alte limbaje de programare. În C, un șir este o matrice de caractere. Pentru a marca sfârșitul unei linii, se folosește caracterul „\0”, despre care am discutat în ultima parte a acestei lecții. Nu este afișat în niciun fel pe ecran, așa că nu îl veți putea privi.

Crearea și inițializarea unui șir

Deoarece un șir este o matrice de caractere, declararea și inițializarea unui șir sunt similare cu operațiuni similare cu matrice unidimensionale.

Următorul cod ilustrează diferitele moduri de inițializare a șirurilor.

Listarea 1.

Char str; char str1 = ("Y","o","n","g","C","o","d","e","r","\0"); char str2 = „Bună ziua!”; char str3 = "Bună ziua!";

Fig.1 Declarația și inițializarea șirurilor de caractere

Pe prima linie pur și simplu declarăm o matrice de zece caractere. Nu este chiar o sfoară, pentru că... nu există niciun caracter nul \0, deocamdată este doar un set de caractere.

A doua linie. Cel mai simplu mod de a inițializa direct. Declaram fiecare simbol separat. Principalul lucru aici este să nu uitați să adăugați caracterul nul \0 .

A treia linie este analogă cu a doua linie. Fii atent la imagine. Deoarece Există mai puține caractere în linia din dreapta decât există elemente în matrice, elementele rămase vor fi umplute cu \0 .

A patra linie. După cum puteți vedea, nu există nicio dimensiune specificată aici. Programul îl va calcula automat și va crea o matrice de caractere de lungimea necesară. În acest caz, caracterul nul \0 va fi inserat ultimul.

Cum se scoate un șir

Să extindem codul de mai sus într-un program cu drepturi depline care va afișa liniile create pe ecran.

Lista 2.

#include int main(void) ( char str; char str1 = ("Y","o","n","g","C","o","d","e","r","r"," \0"); char str2 = "Bună!"; char str3 = "Bună!"; for(int i = 0; i< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


Fig.2 Diferite căi afișarea unui șir pe ecran

După cum puteți vedea, există mai multe modalități de bază de a afișa un șir pe ecran.

  • utilizați funcția printf cu specificatorul %s
  • utilizați funcția puts
  • utilizați funcția fputs, specificând fluxul standard pentru ieșire ca stdout ca al doilea parametru.

Singura nuanță este cu funcțiile put și fputs. Rețineți că funcția puts împachetează ieșirea la următoarea linie, dar funcția fputs nu.

După cum puteți vedea, concluzia este destul de simplă.

Introducerea șirurilor

Intrarea șirurilor este puțin mai complicată decât ieșirea. Cea mai simplă cale ar fi următoarea:

Lista 3.

#include int main(void) (car str; gets(str); puts(str); return 0; )

Funcția gets întrerupe programul, citește un șir de caractere introdus de la tastatură și îl plasează într-o matrice de caractere, al cărui nume este transmis funcției ca parametru.
Funcția gets se iese cu caracterul corespunzător tastei enter și scris în șir ca un caracter nul.
Ai observat pericolul? Dacă nu, compilatorul vă va avertiza cu drag. Problema este că funcția gets iese numai atunci când utilizatorul apasă enter. Acest lucru este plin de faptul că putem merge dincolo de matrice, în cazul nostru - dacă sunt introduse mai mult de 20 de caractere.
Apropo, erorile de depășire a tamponului erau considerate anterior cel mai comun tip de vulnerabilitate. Ele încă există, dar folosirea lor pentru a pirata programe a devenit mult mai dificilă.

Deci ce avem? Avem o sarcină: scriem un șir într-o matrice de dimensiune limitată. Adică trebuie să controlăm cumva numărul de caractere introduse de utilizator. Și aici funcția fgets ne vine în ajutor:

Lista 4.

#include int main(void) (char str; fgets(str, 10, stdin); puts(str); return 0; )

Funcția fgets ia trei argumente ca intrare: variabila în care să scrie șirul, dimensiunea șirului de scris și numele fluxului din care să obțineți datele pentru a scrie în șir, în acest caz stdin. După cum știți deja din lecția 3, stdin este fluxul de intrare standard asociat de obicei cu tastatura. Nu este deloc necesar ca datele să provină din fluxul stdin; în viitor vom folosi și această funcție pentru a citi datele din fișiere.

Dacă în timpul execuției acestui program introducem un șir mai mare de 10 caractere, doar 9 caractere de la început și o întrerupere de linie va fi în continuare scrisă în tablou, fgets va „taia” șirul la lungimea necesară.

Vă rugăm să rețineți că funcția fgets nu citește 10 caractere, ci 9! După cum ne amintim, în șiruri de caractere ultimul caracter este rezervat caracterului nul.

Hai să verificăm. Să rulăm programul din ultima listă. Și introduceți linia 1234567890. Linia 123456789 va fi afișată pe ecran.


Fig. 3 Exemplu de funcție fgets

Se pune întrebarea. Unde s-a dus al zecelea personaj? Și voi răspunde. Nu a dispărut, rămâne în fluxul de intrare. Rulați următorul program.

Lista 5.

#include int main(void) (car str; fgets(str, 10, stdin); puts(str); int h = 99; printf("do %d\n", h); scanf("%d",&h) ; printf(„după %d\n”, h); return 0; )

Iată rezultatul muncii ei.


Fig.4 Buffer stdin non-gol

Lasă-mă să explic ce s-a întâmplat. Am numit funcția fgets. Ea a deschis fluxul de intrare și a așteptat să introducem datele. Am introdus 1234567890\n de la tastatură (\n Adică apăsând tasta Enter). Acesta a mers la fluxul de intrare stdin. Funcția fgets, așa cum era de așteptat, a luat primele 9 caractere 123456789 din fluxul de intrare, le-a adăugat caracterul nul \0 și l-a scris în șirul str . Au mai rămas 0\n în fluxul de intrare.

Apoi declarăm variabila h. Îi afișăm valoarea pe ecran. Apoi numim funcția scanf. Aici este de așteptat să putem introduce ceva, dar... există 0\n suspendat în fluxul de intrare, apoi funcția scanf percepe aceasta ca intrarea noastră și scrie 0 la variabila h. Apoi îl afișăm pe ecran.

Acesta, desigur, nu este tocmai comportamentul pe care îl așteptăm. Pentru a rezolva această problemă, trebuie să ștergem tamponul de intrare după ce am citit intrarea utilizatorului din acesta. Pentru aceasta este folosită o funcție specială fflush. Are un singur parametru - fluxul care trebuie șters.

Să reparăm ultimul exemplu, astfel încât să funcționeze previzibil.

Lista 6.

#include int main(void) ( char str; fgets(str, 10, stdin); fflush(stdin); // șterge fluxul de intrare puts(str); int h = 99; printf("do %d\n", h ); scanf(„%d”,&h); printf(„după %d\n”, h); return 0; )

Acum programul va funcționa așa cum ar trebui.


Fig.4 Spălarea tamponului stdin cu funcția fflush

Pentru a rezuma, se pot observa două fapte. Primul. Pe acest moment folosirea funcției gets este nesigură, așa că este recomandat să folosiți funcția fgets peste tot.

Al doilea. Nu uitați să ștergeți tamponul de intrare dacă utilizați funcția fgets.

Aceasta se încheie conversația despre introducerea șirurilor. Daţi-i drumul.

p»їAgenția SEO de încredere din India poate crește veniturile întreprinderilor mici

80% utilizatori caută pe Google și alte motoare de căutare înainte de a face o achiziție și peste 50% dintre întrebările generate prin motoarele de căutare sunt convertite. Aceste două statistici demonstrează importanța optimizării pentru motoarele de căutare. Există multe statistici și fapte ca atare care arată clar: orice afacere la scară mică, mijlocie sau mare are nevoie de servicii SEO profesionale. Întreprinderile mici și startup-urile se confruntă adesea cu probleme bugetare. Ei pot lua ajutorul oricărei agenții SEO de încredere din India pentru a obține cel mai bun serviciu SEO în bugetul lor pentru a-și crește veniturile.
Căutarea are un impact mare asupra minții consumatorilor. Conform diverselor statistici împărtășite de experții majori în optimizarea motoarelor de căutare pe diverse site-uri web autorizate, cum ar fi Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot etc. SEO captează majoritatea clienților potențiali. De asemenea, clienții potențiali care provin din rezultatele căutării organice au o rată de conversie mai mare. Aceste statistici și comportamentul consumatorilor arată mai clar că cel mai bun serviciu SEO nu este un lux, ci o necesitate pentru orice afacere.
Pentru a ocoli concurența și pentru a crește creșterea afacerii, fiecare organizație trebuie să utilizeze serviciile de optimizare pentru motoarele de căutare. Marile branduri pot investi suficienți bani pentru serviciul expert SEO oferit de o companie SEO de top sau un specialist SEO, dar proprietarii de afaceri mici fac adesea compromisuri cu privire la calitatea acestui serviciu din cauza bugetului mai mic. Este un fapt greu că afacerile mici și startup-urile ajung să părăsească oportunitățile care pot fi create cu serviciul SEO profesional sau să folosească un serviciu SEO ieftin, care nu dă rezultate pozitive.
Proprietarii de afaceri mici și startup-urile pot beneficia de servicii SEO profesionale chiar și în bugetul limitat. Cea mai bună soluție este găsirea unei companii SEO de încredere cu sediul în India. În India, există mulți experți SEO care lucrează cu agenția de marketing digital și oferă cele mai bune servicii din industrie. Îți pot oferi serviciile SEO necesare în bugetul tău. Salariile pot fi negociate cu o agenție SEO din India pentru a obține servicii mai bune la tarife mai mici. Cu toate acestea, nu vă îndrăgostiți de un serviciu SEO ieftin, care taxează mai puțin și promite că veți oferi mai mult, deoarece expertiza vine pe propriile lor costuri. Trebuie să vedeți portofoliul sau să puneți întrebări adecvate înainte de a contracta o companie pentru afacerea dvs.
Experții SEO din India sunt calificați cu cele mai bune practici de optimizare pentru motoarele de căutare. De asemenea, există unii specialiști SEO în India, cum ar fi Ash Vyas, care se specializează în crearea celei mai bune strategii de optimizare pentru motoarele de căutare pentru o afacere cu bugetul declarat. Profesioniștii SEO vor crea un plan clar și, de asemenea, vor împărtăși care pot fi rezultatele așteptate. În acest fel, puteți fi bine conștienți de investiția și rentabilitatea dvs. Acest lucru ajută la luarea unei decizii de afaceri mai bune.
O idee bună este să găsiți și să contractați o companie SEO de încredere din India, care să ofere cele mai bune servicii SEO cât mai curând posibil. De asemenea, puteți începe cu un buget mic și activități limitate pentru a începe să vă indexați paginile web și să vă îmbunătățiți cuvintele cheie în motoarele de căutare. Nu așteptați momentul perfect sau o zi când veți avea mii de dolari pentru a investi în cele mai bune servicii SEO. Începerea devreme vă va ajuta să obțineți rezultate mai rapide atunci când puteți deveni agresiv cu abordarea dvs. de marketing. O companie SEO de încredere cu sediul în India vă va ajuta să vă definiți planurile actuale și viitoare pentru a obține rezultate bune. Mai multe pagini indexate au sporit clasamentele și marca credibilă a afacerii tale realizate cu practici SEO profesionale continue vor dubla întrebările, afacerile și veniturile. Orice afacere mică poate începe cu investiții de două cifre în serviciile profesionale SEO. Există multe agenții SEO în India care oferă un buget redus, dar rezultă din servicii de optimizare a motoarelor de căutare.

sondaje din exil

  • CraigWew

    12.04.2018

    p»їImportanța stabilirii raportului cu clientul în domeniul imobiliar și vânzări generale

    Importanta stabilirii unui raport cu clientul.
    Stabilirea relației cu un client trebuie să fie câștigată și trebuie abordată ca o parte integrantă a procesului de vânzare.
    Pentru a face ca un client și pe tine însuți să relaționați pe o bază reală, unul la unul, implică două lucruri!
    În primul rând, va trebui să fii conștient și să fii acolo! În al doilea rând, trebuie să înțelegeți că există două etape diferite care vor avea loc în timpul acestui proces.
    A-Fii acolo-ce înseamnă asta?
    o Majoritatea oamenilor nu ascultă cu adevărat o altă persoană în timp ce vorbește. În general, ei sunt atât de ocupați să formuleze următorul răspuns sau afirmație încât nu au putut să asculte cu adevărat.
    o Dacă asta sună ca tine, a fi acolo înseamnă taci și ascultă!
    B-Care este prima sau etapa inițială?
    o În general, aveți doar câteva minute pentru a vă stabili în mintea clienților ca cineva cu care doresc să aibă de-a face.
    o Când aveți îndoieli, este mai bine să puneți mai întâi întrebări care să-i atragă și să vorbească despre ei înșiși.
    o De asemenea, este întotdeauna sigur să arăți ca un profesionist - nu mă refer la stoic sau sec, ci la cineva care știe ce face și vorbește și arată rolul.
    C-Alte etape
    o Pe măsură ce timpul trece, prin conversații și întrebări pe care le vor avea, fie îți vei stabili capacitatea, fie nu.
    o Fiți conștienți de faptul că probabil că vă vor măsura pentru o perioadă. Vestea bună este că, la un moment dat, dacă ați reușit să stabiliți un raport, ei se vor relaxa și vă puteți concentra amândoi pe găsirea sau vânzarea casei.
    Ce altceva mă poate ajuta să dezvolt relația?
    o Încercând să înțeleagă diferite tipuri de personalitate și apoi spunând și punând întrebările potrivite.
    o Dacă aveți o relație bună (ajungeți la aceeași lungime de undă cu clientul), atunci vânzarea s-a încheiat practic, acum este doar o chestiune de a găsi casa potrivită sau de a completa documentele de listare.
    Dar diferitele personalități
    o Deoarece aceasta nu este o carte despre psihiatrie, deocamdată înțelegeți doar două tipuri principale.
    o Există oameni introvertiți și extrovertiți.
    o Știi tipul. Gândește-te la trei persoane pe care le cunoști și care se potrivesc fiecărei clasificări.
    Dar limbajul corpului și modelele de vorbire?
    o Dacă vorbesc repede sau încet, încercați să le imitați modelele de vorbire.
    o Dacă vorbesc tare sau încet, procedați la fel. Se aplecă înainte sau înapoi?
    o Inutil să spun că există o mulțime de cărți scrise pe acest subiect. Fiți conștienți de faptul că este un factor important, mai ales când stați într-o sală de conferințe sau acasă discutând o afacere de 400.000 USD.
    Dezvoltarea raportului este o abilitate care poate fi învățată și îmbunătățită.
    o Cu toții am experimentat un agent de vânzări care ne-a vândut ceva și totuși nu am simțit că suntem vânduți. Motivul este că el sau ea te-a făcut să te simți confortabil acolo unde ai avut încredere în ei.
    Cum dezvoltăm relația?
    o Folosește-ți ochii și urechile și pune întrebări. A explica
    o Folosește ochii:
    o Uită-te la rochia lor - la mașina lor - la bunurile lor personale și vreau să spun, uită-te cu adevărat la ele și descifrează ce îți spune asta despre ei.
    o Folosește urechile:
    o Ascultă ce spun ei și pune întrebări pentru a ajunge la fundul adevăratei lor MOTIVAȚII!
    Acum, în timpul acestei conversații, probabil că vor fi unul sau două lucruri pe care le vei descoperi pe care le ai în comun cu ei. (Familie, zone geografice, pescuit etc.) Când întâlniți un teren comun, spuneți-le că sunteți familiarizat și apoi acordați-vă un minut pentru a discuta cu ei.
    Care este Scopul?
    o Odată ce vă acceptă ca unul dintre ei, sunteți în măsură să aveți cu adevărat o experiență grozavă în vânzare, deoarece acum lucrați împreună, apoi ca o echipă - nu mai sunteți vânzătorul, vă aflați acum într-o poziție de consilier .
    o Amintiți-vă, clientul fie vă va permite sau nu vă va permite să intrați în lumea lui. Dacă înțelegi acest lucru și muncești din greu pentru a deveni empatic cu el/ea, poți câștiga o poziție de încredere. În cele mai multe cazuri, îi veți vedea de fapt relaxându-se (limbajul corpului) atunci când se întâmplă acest lucru, sunteți pe drum.
    o Pentru a ilustra acest lucru, ați ținut vreodată un discurs și ați observat că, pe măsură ce vă conectați în sfârșit cu un membru al publicului, acesta va da din cap în semn de aprobare. Toate aceste lucruri pot părea banale, dar nu sunt.
    În încheiere, dacă poți câștiga încrederea clienților, vânzarea unui produs sau serviciu este mult mai ușoară, iar experiența poate fi plăcută pentru toți cei implicați.
    Amintiți-vă întotdeauna că un Win/Win este cea mai bună situație.

Biblioteca de funcții C și C++ include un set bogat de funcții de procesare a șirurilor și a caracterelor. Funcțiile șiruri de caractere operează pe matrice de caractere terminate cu caractere nule. În limbajul C, pentru a utiliza funcții șir, trebuie să includeți un fișier antet la începutul modulului de program , iar pentru cele simbolice - fișierul antet . C++ folosește anteturi pentru a lucra cu funcții șir și caractere Și respectiv. Acest capitol folosește nume de antet C pentru a facilita prezentarea.

Deoarece limbajele C și C++ nu controlează automat încălcarea limitelor lor atunci când efectuează operațiuni cu matrice, toată responsabilitatea pentru depășirea matricei cade pe umerii programatorului. Neglijarea acestor subtilități poate duce la blocarea programului.

În C și C++, caracterele imprimabile sunt caracterele afișate pe terminal. În mediile ASCII, acestea sunt situate între spațiu (0x20) și tilde (OxFE). Caracterele de control au valori cuprinse între zero și Ox1F; acestea includ și simbolul DEL(Ox7F).

Din punct de vedere istoric, argumentele funcțiilor de caractere au fost valori întregi, dintre care a fost folosit doar octetul mic. Funcțiile de caractere își convertesc automat argumentele în caracter nesemnat. Desigur, sunteți liber să apelați aceste funcții cu argumente de caractere, deoarece caracterele sunt ridicate automat la rangul de numere întregi atunci când funcția este apelată.

În titlu este definit tipul size_t, care este rezultatul aplicării operatorului sizeof și este un tip de întreg fără semn.

C99 a adăugat calificativul de restricție la unii parametri ai mai multor funcții definite inițial în C89. La revizuirea fiecărei astfel de funcții, va fi dat prototipul său folosit în mediul C89 (precum și în mediul C++), iar parametrii cu atributul restrict vor fi notați în descrierea acestei funcții.

Lista de funcții

Verificați afilierea

isalnum - Verificarea dacă un caracter este alfanumeric
isalpha - Verificarea dacă un simbol aparține literelor
isblank - Verificați dacă există un caracter gol
iscntrl - Verificarea dacă un simbol aparține simbolurilor de control
isdigit - Verificarea dacă un caracter este digital
isgraph - Verifică dacă un caracter este imprimabil, dar nu un spațiu
islower - Verifică dacă un caracter este scris cu minuscule
isprint - Verificarea dacă un caracter este imprimabil
ispunct - Verificarea dacă un simbol aparține semnelor de punctuație
isspace - Verifică dacă un caracter este un caracter alb
isupper - Verifică dacă un caracter este cu majuscule
isxdigit - Verifică dacă un caracter este hexazecimal

Lucrul cu matrice de caractere

memchr - Caută într-o matrice pentru a găsi prima apariție a unui caracter
memcmp - Compară un număr specificat de caractere din două matrice
memcpy - Copiază caracterele dintr-o matrice în alta
memmove - Copiază caracterele dintr-o matrice în alta, ținând cont de suprapunerea matricei
memset - Completează un număr specificat de caractere dintr-o matrice cu un număr dat

Manipularea șirurilor

strcat - Adaugă o copie a unui singur șir la un șir dat
strchr - Returnează un pointer la prima apariție a octetului inferior al parametrului dat
strcmp - Compară două șiruri în ordine lexicografică
strcoll - Compară un șir cu altul în funcție de parametrul setlocale
strcpy - Copiază conținutul unui șir în altul
strcspn - Returnează un șir care nu conține caracterele specificate
strerror - Returnează un pointer către șirul care conține mesaj de sistem despre eroare
strlen - Returnează lungimea terminată în nul a unui șir

Etichete: linii C. Matrice Char.

Coarde în C. Introducere.

Acesta este un articol introductiv despre șirurile C. O descriere mai detaliată și exemple vor veni când vom învăța cum să lucrăm cu memoria și pointerii. Într-un computer, toate valorile sunt stocate ca numere. Și linii, de asemenea, nu există simboluri sau litere acolo. Un termen este o matrice de numere. Fiecare număr corespunde unui anumit caracter, care este preluat din tabelul de codificare. Când este afișat pe ecran, simbolul este afișat într-un anumit mod.
Matricele de tip char sunt folosite pentru a stoca șiruri. Repet încă o dată - tipul char este numeric, stochează un octet de date. Dar, conform tabelului de codificare, fiecare dintre aceste numere este asociat cu un caracter. Și în direcția opusă - fiecare caracter este determinat de numărul său de serie din tabelul de codificare.
De exemplu

#include #include void main() (car c = "A"; int i = 65; printf("afișează ca caracter %c\n", c); printf("afișează ca int %d\n", c); printf(" afișare ca caracter %c\n", i); printf("afișare ca caracter %d\n", i); getch(); )

Am creat două variabile, una de tip char, alte int. Litera „A” are o valoare numerică de 65. Este o literă, nu un șir și, prin urmare, este înconjurată de ghilimele simple. O putem imprima ca scrisoare

Printf("afișare ca caracter %c\n", c);

Apoi va fi scos
A
Dacă îl scoateți ca număr, va fi
65
Puteți face același lucru cu numărul 65, care este stocat în tip variabil int.
Caracterele speciale au, de asemenea, propriul număr

#include #include void main() (printf("%c", "\a"); printf("%d", "\a"); printf("%c", 7); getch(); )

Aici semnalul sonor va fi mai întâi „ieșit”, apoi valoarea sa numerică, apoi din nou semnalul sonor.
Un șir în C este o matrice de tip char, al cărui ultimul element stochează caracterul terminal „\0”. Valoarea numerică a acestui caracter este 0, deci putem spune că tabloul se termină cu zero.
De exemplu

#include #include void main() (cuvânt caracter; cuvânt = "A"; cuvânt = "B"; cuvânt = "C"; cuvânt = "\0"; //cuvânt = 0; echivalent cu printf ("%s", cuvânt) ; getch(); )

Cheia %s a fost folosită pentru ieșire. În acest caz, linia este imprimată până la primul caracter terminal, deoarece funcția printf nu cunoaște dimensiunea matricei de cuvinte.
Daca in acest exemplu nu puneti

Cuvânt = "\0";

atunci va fi scos un șir de caractere de lungime arbitrară până când este întâlnit primul octet umplut cu zerouri.

#include #include void main() ( cuvântul char = "ABC"; textul caracterului = ("H", "E", "L", "L", "O"); printf ("%s\n", cuvânt); printf ("%s", text); getch(); )

În acest caz, totul este corect. Șirul „ABC” se termină cu zero și inițializam matricea de cuvinte cu el. Șirul de text este inițializat literă cu literă, toate caracterele rămase, după cum urmează din capitolul despre matrice, sunt umplute cu zerouri.

Rânduri de lectură

Pentru a solicita un șir de la utilizator, trebuie să creați un buffer. Mărimea tamponului trebuie selectată în prealabil, astfel încât cuvântul introdus să se potrivească în ea. La citirea liniilor, există pericolul ca utilizatorul să introducă mai multe date decât permite tamponul. Aceste date vor fi citite și plasate în memorie și vor suprascrie valorile altor persoane. În acest fel, puteți efectua un atac prin înregistrarea octeților necesari, în care, de exemplu, merită să mergeți la o secțiune de cod cu un program rău intenționat sau să înregistrați date.

#include #include void main() (car buffer; scanf("%19s", buffer); printf("%s", buffer); getch(); )

În acest caz, numărul de caractere introduse este limitat la 19, iar dimensiunea tamponului este cu 1 mai mare, deoarece este necesar să stocați caracterul terminal. Să scriem un program simplu care cere utilizatorului un șir și returnează lungimea acestuia.

#include #include void main() ( buffer char; len nesemnat = 0; scanf("%127s", buffer); while (buffer != "\0") (len++; ) printf("lungime(%s) == %d" , buffer, len); getch(); )

Deoarece valoarea numerică a caracterului „\0” este zero, putem scrie

While (buffer != 0) (len++; )

Sau, chiar mai scurt

While (buffer) (len++; )

Acum să scriem un program care cere utilizatorului două cuvinte și le compară

#include #include /* Rezultatul comparației va fi numărul 0 dacă cuvintele sunt egale cu 1 dacă primul cuvânt este mai mare decât al doilea în ordinea lexicografică -1 dacă al doilea cuvânt este mai mare */ void main() ( char firstWord; / /Primul cuvânt char secondWord; //Al doilea cuvânt fără semn i; / /Counter int cmpResult = 0; //Rezultat comparație scanf("%127s", firstWord); scanf("%127s", secondWord); pentru (i = 0 ; i< 128; i++) { if (firstWord[i] >secondWord[i]) ( //Mai mult chiar dacă al doilea cuvânt s-a terminat deja, deoarece //apoi se termină cu zero cmpResult = 1; break; ) else if (firstWord[i]< secondWord[i]) { cmpResult = -1; break; } } printf("%d", cmpResult); getch(); }

Deoarece fiecare literă are o valoare numerică, acestea pot fi comparate între ele ca numere. În plus, de obicei (dar nu întotdeauna!) literele din tabelele de codificare sunt aranjate alfabetic. Prin urmare, sortați după valoare numerică De asemenea, va fi sortat alfabetic.

34

--- Ghid C# --- Siruri de caractere

Din punct de vedere al programării obișnuite, șir tipul de date șir este una dintre cele mai importante din C#. Acest tip definește și acceptă șiruri de caractere. Într-un număr de alte limbaje de programare, un șir este o matrice de caractere. Și în C#, șirurile sunt obiecte. Prin urmare, tipul șir este un tip de referință.

Construire șiruri

Cel mai simplu mod de a construi un șir de caractere este să utilizați un șir literal. De exemplu, următoarea linie de cod atribuie variabilei de referință șir str o referință la un literal șir:

String str = „Exemplu șir”;

În acest caz, variabila str este inițializată cu secvența de caractere „Example String”. Un obiect de tip șir poate fi creat și dintr-o matrice de tip char. De exemplu:

Char chararray = ("e", "x", "a", "m", "p", "l", "e"); șir str = șir nou (chararray);

Odată ce un obiect șir este creat, acesta poate fi folosit oriunde aveți nevoie de un șir de text cuprins între ghilimele.

Persistența șirului

În mod ciudat, conținutul unui obiect de tip șir nu poate fi modificat. Aceasta înseamnă că odată ce o secvență de caractere a fost creată, aceasta nu poate fi modificată. Dar această limitare contribuie la o implementare mai eficientă șiruri de caractere. Prin urmare, acest dezavantaj aparent evident se transformă de fapt într-un avantaj. Deci, dacă un șir este necesar ca o variație a unui șir existent, atunci în acest scop ar trebui să creați linie nouă, care conține toate modificările necesare. Și, deoarece obiectele șir neutilizate sunt colectate automat ca gunoi, nici nu trebuie să vă faceți griji cu privire la soarta șirurilor inutile.

Trebuie subliniat, totuși, că referințele variabile la șiruri de caractere (adică obiecte de tip șir) sunt supuse modificării și, prin urmare, se pot referi la un alt obiect. Dar conținutul obiectului șir în sine nu se schimbă după ce este creat.

Să ne uităm la un exemplu:

Static void addNewString() ( șir s = „Acesta este accidentul vascular cerebral”; s = „Acesta este un accident vascular cerebral nou”; )

Să compilam aplicația și să încărcăm ansamblul rezultat în utilitarul ildasm.exe. Figura arată codul CIL care va fi generat pentru metoda void addNewString():

Rețineți că există numeroase apeluri la codul operațional ldstr (încărcare șir). Acest opcode ldstr în CIL implică încărcarea unui nou obiect șirîntr-un morman gestionat. Drept urmare, obiectul anterior care conținea valoarea „Acesta este lovitura mea” va fi în cele din urmă colectat de gunoi.

Lucrul cu șiruri

In clasa System.String este furnizat un set de metode pentru determinarea lungimii datelor de caractere, căutarea unui subșir în șirul curent, conversia caracterelor din majuscule în litere mici și invers etc. În continuare ne vom uita la această clasă mai detaliat.

Proprietatea de clasă Field, Indexer și String

Clasa String definește un singur câmp:

Șir public static numai pentru citire Gol;

Câmpul Gol denotă un șir gol, de exemplu. un șir care nu conține niciun caracter. Aceasta este diferită de o referință String goală, care este pur și simplu făcută la un obiect inexistent.

În plus, clasa String definește un singur indexator numai pentru citire:

Public Char this ( obține; )

Acest indexator vă permite să obțineți un caracter la un index specificat. Indexarea șirurilor de caractere, ca și tablourile, începe de la zero. Obiectele String sunt persistente și nu se modifică, așa că are sens ca clasa String să accepte un indexator doar pentru citire.

În cele din urmă, clasa String definește o singură proprietate numai pentru citire:

Public int Lungime ( get; )

Proprietatea Length returnează numărul de caractere din șir. Exemplul de mai jos arată utilizarea indexatorului și a proprietății Length:

Utilizarea sistemului; clasă Exemplu ( static void Main() ( string str = "Șir simplu"; // Obține lungimea șirului și al 6-lea caracter din linie folosind indexerul Console.WriteLine ("Lungimea șirului este (0), 6th caracterul este "(1)"" , str.Length, str); ))

Operatori de clasă String

Clasa String supraîncarcă următorii doi operatori: == și !=. Operatorul == este folosit pentru a testa două șiruri de caractere pentru egalitate. Când operatorul == este aplicat referințelor la obiect, de obicei testează dacă ambele referințe sunt făcute la același obiect. Și când operatorul == este aplicat referințelor la obiecte de tip String, conținutul șirurilor în sine este comparat pentru egalitate. Același lucru este valabil și pentru operatorul !=. Când este aplicat referințelor la obiecte de tip String, conținutul șirurilor în sine este comparat pentru inegalitate. Cu toate acestea, alți operatori relaționali, inclusiv =, compară referințele la obiecte de tip String în același mod în care compară referințele la obiecte de alte tipuri. Și pentru a verifica dacă un șir este mai mare decât altul, ar trebui să apelați metoda Compare() definită în clasa String.

După cum va deveni clar, multe tipuri de comparații de șiruri de caractere se bazează pe informații culturale. Dar acest lucru nu se aplică operatorilor == și !=. La urma urmei, pur și simplu compară valorile ordinale ale caracterelor din șiruri. (Cu alte cuvinte, ei compară valorile binare ale caracterelor care nu au fost modificate de normele culturale, adică standardele locale.) Prin urmare, acești operatori efectuează comparații de șiruri într-o manieră insensibilă la majuscule și la cultură.

Metode ale clasei de șiruri

Următorul tabel enumeră unele dintre cele mai multe metode interesante din această clasă, grupate după scop:

Metode de lucru cu șiruri
Metodă Structură și supraîncărcări Scop
Comparație de șiruri
comparaţie() public static int Compare(șir strA, șir strB)

Public static int Compare (șir strA, șir strB, bool ignoreCase)

Public static int Compare(șir strA, șir strB, StringComparison comparisonType)

Public static int Compare (șir strA, șir strB, bool ignoreCase, cultură CultureInfo)

Metoda statică compară șirul strA cu șirul strB. Returnează o valoare pozitivă dacă strA este mai mare decât strB; negativ dacă strA este mai mic decât strB; și zero dacă șirurile strA și strB sunt egale. Comparațiile se fac pe baza registrului și a culturii.

Dacă ignoreCase este evaluat ca adevărat, comparația nu ia în considerare diferențele dintre literele mari și mici. În caz contrar, aceste diferențe sunt luate în considerare.

Parametrul comparisonType specifică modul specific în care sunt comparate șirurile. Clasa CultureInfo este definită în spațiul de nume System.Globalization.

public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime)

Public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime, bool ignoreCase)

Public static int Compare(șir strA, int indexA, șir strB, int indexB, int lungime, StringComparison comparisonType)

Public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime, bool ignoreCase, cultură CultureInfo)

Compară părți ale șirurilor strA și strB. Comparația începe cu elementele șir strA și strB și include numărul de caractere specificat de parametrul length. Metoda returnează o valoare pozitivă dacă o parte a șirului strA este mai mare decât o parte a șirului strB; valoare negativă dacă o parte din șirul strA este mai mică decât o parte din șirul strB; și zero dacă părțile șirurilor de caractere strA și strB care sunt comparate sunt egale. Comparațiile se fac pe baza registrului și a culturii.

CompareOrdinal() public static int CompareOrdinal(șir strA, șir strB)

Public static int CompareOrdinal(șir strA, int indexA, șir strB, int indexB, int număr)

Face același lucru ca metoda Compare(), dar fără a lua în considerare setările locale

Compara cu() public int CompareTo(valoarea obiectului)

Compară șirul de apelare cu reprezentarea șir a obiectului valoare. Returnează o valoare pozitivă dacă șirul de apelare este mai mare decât valoarea; negativ dacă șirul de apelare este mai mic decât valoarea; și zero dacă șirurile comparate sunt egale

public int CompareTo(string strB)

Compară șirul de apelare cu șirul strB

este egal() public override bool Equals(object object)

Returnează valoarea booleană adevărată dacă șirul de apelare conține aceeași secvență de caractere ca și reprezentarea șir a lui obj. Efectuează comparații ordinale ținând cont de majuscule, dar insensibile din punct de vedere cultural

public bool Egal (valoare șir)

Public bool Equals (valoare șir, StringComparison comparisonType)

Returnează valoarea booleană adevărată dacă șirul de apelare conține aceeași secvență de caractere ca și valoarea șirului. Se efectuează o comparație ordinală care ține cont de majuscule, dar nu ține cont de cultura. Parametrul comparisonType specifică modul specific în care sunt comparate șirurile

public static bool Egal (șir a, șir b)

Public static bool Equals (șir a, șir b, StringComparison comparisonType)

Returnează valoarea booleană adevărată dacă șirul a conține aceeași secvență de caractere ca șirul b. Se efectuează o comparație ordinală care ține cont de majuscule, dar nu ține cont de cultura. Parametrul comparisonType specifică modul specific în care sunt comparate șirurile

Concatenarea (conectarea) șirurilor
Concat() public static string Concat(string str0, string str1);

public static string Concat(params string values);

Combină instanțe individuale de șir într-un singur șir (concatenare)
Căutați într-un șir
Conține() public bool Conține (valoare șir) O metodă care vă permite să determinați dacă un șir conține un anumit subșir (valoare)
Incepe cu() public bool StartsWith(valoare șir)

Public bool StartsWith(valoare șir, Tip comparație șir de caractere)

Returnează valoarea booleană adevărată dacă șirul de apelare începe cu valoarea subșirului. În caz contrar, se returnează valoarea booleană false. Parametrul comparisonType specifică modul specific de a efectua căutarea

Se termină cu() public bool EndsWith(valoare șir)

Public bool EndsWith(valoare șir, tip de comparație StringComparison)

Returnează valoarea booleană adevărată dacă șirul de apelare se termină cu valoarea subșirului. În caz contrar, returnează valoarea booleană false. Parametrul comparisonType specifică metoda de căutare specifică

Index de() public int IndexOf(valoare caracter)

Public int IndexOf(valoare șir)

Găsește prima apariție a unui subșir sau caracter dat într-un șir. Dacă caracterul sau subșirul căutat nu este găsit, atunci valoarea -1 este returnată.

public int IndexOf(valoare caracter, int startIndex)

Public int IndexOf(valoare șir, int startIndex)

Public int IndexOf(valoare caracter, int startIndex, int număr)

Public int IndexOf(valoare șir, int startIndex, int număr)

Returnează indexul primei apariții a caracterului sau a valorii subșirului din șirul de apelare. Căutarea începe la elementul specificat de startIndex și se întinde pe numărul de elemente specificate de count (dacă este specificat). Metoda returnează -1 dacă caracterul sau subșirul căutat nu este găsit

LastIndexOf() Versiunile supraîncărcate sunt similare cu metoda IndexOf().

La fel ca IndexOf, dar găsește ultima apariție a unui caracter sau subșir, nu prima

IndexOfAny() public int IndexOfAny(char anyOf)

Public int IndexOfAny(char anyOf, int startIndex)

Public int IndexOfAny(char anyOf, int startIndex, int număr)

Returnează indexul primei apariții a oricărui caracter din tabloul anyOf găsit în șirul de apelare. Căutarea începe de la elementul specificat de startIndex și se întinde pe numărul de elemente specificate de count (dacă este specificat). Metoda returnează -1 dacă nu se potrivește niciun caracter din tabloul anyOf. Căutarea se efectuează în mod ordinal

LastIndexOfAny Versiunile supraîncărcate sunt similare cu metoda IndexOfAny().

Returnează indexul ultimei apariții a oricărui caracter din tabloul anyOf găsit în șirul de apelare

Împărțirea și unirea șirurilor
Despică șir public Split(params char separator)

Șir public Split(params char separator, int count)

O metodă care returnează o matrice de șiruri cu subșirurile prezente în această instanță în interior, care sunt separate unele de altele prin elemente din matricea de șiruri de caractere specificată.

Prima formă a metodei Split() împarte șirul de apelare în părțile sale componente. Rezultatul este un tablou care conține subșirurile obținute din șirul de apelare. Caracterele care delimitează aceste subșiruri sunt transmise în tabloul separator. Dacă matricea de separare este goală sau se referă la șirul gol, atunci un spațiu este folosit ca separator de subșir. Și în a doua formă aceasta metoda returnează numărul de subșiruri specificat de parametrul count.

șir public Split (params char separator, opțiuni StringSplitOptions)

Split șir public (separator șir, opțiuni StringSplitOptions)

Split șir public (params char separator, int count, StringSplitOptions opțiuni)

Split șir public (separator șir, număr int, opțiuni StringSplitOptions)

În primele două forme ale metodei Split(), șirul de apelare este împărțit în părți și este returnat un tablou care conține subșirurile obținute din șirul de apelare. Caracterele care separă aceste subșiruri sunt transmise în tabloul separator. Dacă matricea de separare este goală, atunci un spațiu este folosit ca separator. Și în a treia și a patra formă a acestei metode, este returnat numărul de rânduri limitat de parametrul count.

Dar, în toate formele, parametrul opțiuni specifică o modalitate specifică de a gestiona liniile goale care sunt produse atunci când doi delimitatori sunt adiacenți. Enumerarea StringSplitOptions definește doar două valori: Nici unulȘi EliminațiEmptyEntries. Dacă parametrul opțiuni este Nici unul, atunci linii goale sunt incluse în rezultatul final al împărțirii șirului original. Și dacă parametrul opțiuni este setat la RemoveEmptyEntries, atunci liniile goale sunt excluse din rezultatul final al împărțirii șirului original.

A te alatura() Join string public static (separator șir, valoare șir)

Unire șir static public (separator șir, valoare șir, int startIndex, int număr)

Construiește un șir nou combinând conținutul unei matrice de șiruri.

Prima formă a metodei Join() returnează un șir format din subșiruri concatenate trecute în tabloul de valori. Cea de-a doua formă returnează, de asemenea, un șir format din subșiruri trecute în tabloul de valori, dar acestea sunt concatenate într-un anumit număr de număr, începând cu elementul de matrice value. În ambele forme, fiecare linie ulterioară este separată de linia anterioară printr-o linie separatoare specificată de parametrul separator.

Linii de umplere și tundere
Tunde() șir public Trim()

șir public Trim(params char trimChars)

O metodă care vă permite să eliminați toate aparițiile unui anumit set de caractere de la începutul și sfârșitul liniei curente.

Prima formă a metodei Trim() elimină spațiile de început și de final din șirul de apelare. Și a doua formă a acestei metode elimină aparițiile de început și de sfârșit ale șirului de caractere care apelează din tabloul trimChars. Ambele forme returnează șirul rezultat.

PadLeft() șir public PadLeft(int totalWidth)

Șir public PadLeft(int totalWidth, char paddingChar)

Vă permite să completați un șir cu caractere în stânga.

Prima formă a metodei PadLeft() introduce spații în partea stângă a șirului de apelare, astfel încât lungimea sa totală să devină egală cu valoarea parametrului totalWidth. Și în a doua formă a acestei metode, caracterele notate de parametrul paddingChar sunt introduse în partea stângă a șirului de apelare, astfel încât lungimea sa totală să devină egală cu valoarea parametrului totalWidth. Ambele forme returnează șirul rezultat. Dacă valoarea parametrului totalWidth este mai mică decât lungimea șirului de apelare, atunci este returnată o copie a șirului de apelare neschimbat.

PadDreapta() La fel ca PadLeft()

Vă permite să adăugați un șir cu caractere la dreapta.

Inserarea, ștergerea și înlocuirea rândurilor
Introduce() șir public Insert(int startIndex, valoare șir)

Folosit pentru a insera un rând în altul, unde valoarea denotă rândul care trebuie inserat în rândul apelant la startIndex. Metoda returnează șirul rezultat.

Elimina() șir public Remove(int startIndex)

Șir public Eliminare (int startIndex, int număr)

Folosit pentru a elimina o parte dintr-un șir. În prima formă a metodei Remove(), eliminarea începe în locația indicată de startIndex și continuă până la sfârșitul liniei. Și în cea de-a doua formă a acestei metode, numărul de caractere determinat de parametrul count este eliminat din șir, pornind de la locul indicat de indexul startIndex.

A inlocui() șir public Înlocuire(char oldChar, char newChar)

Șir public Înlocuire (șir vechiValoare, șir newValue)

Folosit pentru a înlocui o parte dintr-un șir. În prima formă a metodei Replace(), toate aparițiile caracterului oldChar din șirul de apelare sunt înlocuite cu caracterul newChar. Și în a doua formă a acestei metode, toate aparițiile șirului oldValue din linia de apelare sunt înlocuite cu șirul newValue.

Schimbă cazul
În sus() șir public ToUpper()

Scrie cu majuscule toate literele din șirul de apelare.

Pentru a reduce() șir public ToLower()

Toate literele mici din șirul de apelare.

Obținerea unui subșir dintr-un șir
subșir () șir public Subșir (int startIndex)

Șir public Subșir (int startIndex, int lungime)

În prima formă a metodei Substring(), subșirul este preluat pornind de la locația indicată de parametrul startIndex și terminând la sfârșitul șirului de apelare. Și în cea de-a doua formă a acestei metode, se extrage un subșir format din numărul de caractere determinat de parametrul lungime, pornind de la locul indicat de parametrul startIndex.

Următorul exemplu de program utilizează mai multe dintre metodele de mai sus:

Utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Text; namespace ConsoleApplication1 ( clasa Program ( static void Main(string args) ( // Compara primele două linii șir s1 = „acesta este un șir"; șir s2 = „acesta este text și acesta este un șir"; if (String. CompareOrdinal(s1, s2) != 0) Console.WriteLine(„Șirurile s1 și s2 nu sunt egale”); if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine ("Totuși, acestea conțin același text"); // Concatenarea șirurilor de caractere Console.WriteLine(String.Concat("\n" + "One, two ","trei, patru")); // Căutare într-un șir / / Prima apariție a unui subșir dacă (s2. IndexOf(„this”) != -1) Console.WriteLine(„Cuvântul \”acest\” găsit în linie, acesta „+ ”este la: (0) poziția” , s2.IndexOf("this")); / / Ultima apariție a subșirului if (s2.LastIndexOf("this") != -1) Console.WriteLine("Ultima apariție a cuvântului \"this\" este " + "la (0) poziție", s2.LastIndexOf("this" )); // Căutare dintr-o matrice de caractere char myCh = ("ы","x","t"); if (s2.IndexOfAny (myCh) != -1) Console.WriteLine("Unul dintre caracterele din tabloul ch "+ "găsit în linia curentă la poziția (0)", s2.IndexOfAny(myCh)); // Determinați dacă linia începe cu subșirul dat if (s2.StartsWith("acesta este text") == true) Console.WriteLine("Subșir găsit!"); // Determinați dacă șirul conține un subșir // folosind exemplul de determinare a șirului de sistem de operare al utilizatorului myOS = Environment.OSVersion.ToString(); if (myOS.Contains("NT 5.1")) Console.WriteLine("Dvs. sistem de operare Windows XP"); else if (myOS.Contains ("NT 6.1")) Console.WriteLine ("Sistemul dvs. de operare este Windows 7"); Console.ReadLine(); ) ) )

Câteva despre compararea șirurilor în C#

Probabil cea mai comună dintre toate operațiunile cu șir de caractere este compararea unui șir cu altul. Înainte de a analiza orice metode de comparare a șirurilor, merită să subliniem următoarele: Comparațiile de șiruri pot fi făcute în .NET Framework în două moduri principale:

    În primul rând, comparația poate reflecta obiceiurile și normele unui anumit mediu cultural, care sunt adesea cadre culturale care intră în joc atunci când programul este implementat. Acesta este un comportament standard pentru unele metode de comparare, dar nu pentru toate.

    Și în al doilea rând, comparația se poate face indiferent de setările culturale doar prin valorile ordinale ale personajelor care alcătuiesc șirul. În general, comparațiile non-culturale ale șirurilor folosesc ordinea lexicografică (și caracteristicile lingvistice) pentru a determina dacă un șir este mai mare decât, mai mic sau egal cu un alt șir. În comparație ordinală, șirurile sunt pur și simplu ordonate pe baza valorii nemodificate a fiecărui caracter.

Din cauza diferențelor în modul în care diferă comparațiile de șiruri culturale și comparațiile ordinale și din cauza consecințelor fiecărei astfel de comparații, vă recomandăm insistent să urmați cele mai bune practici oferite în prezent de Microsoft. La urma urmei, alegerea unei metode greșite de comparare a șirurilor poate duce la funcționarea incorectă a programului atunci când acesta este operat într-un mediu diferit de cel în care a fost dezvoltat.

Alegerea modului de comparare a șirurilor de caractere este o decizie foarte importantă. Ca regulă generală și fără excepție, ar trebui să alegeți să comparați șirurile într-o manieră sensibilă din punct de vedere cultural dacă acest lucru este făcut în scopul de a afișa rezultatul utilizatorului (de exemplu, pentru a afișa o serie de șiruri sortate în ordine lexicografică). Dar dacă șirurile conțin informații fixe care nu sunt destinate să fie modificate pentru diferențele culturale, cum ar fi un nume de fișier, un cuvânt cheie, o adresă de site web sau o valoare de securitate, atunci ar trebui să alegeți compararea șirurilor ordinale. Desigur, caracteristicile aplicației particulare dezvoltate vor dicta alegerea unei metode adecvate pentru compararea șirurilor de caractere.

Clasa String oferă cel mai mult metode diferite comparând șirurile care sunt enumerate în tabelul de mai sus. Cea mai universală dintre ele este metoda Compare(). Permite compararea a două șiruri de caractere în întregime sau parțial, diferențiat de majuscule sau minuscule, într-un mod specificat de parametrul tip StringComparison, precum și informațiile culturale furnizate de parametrul tip CultureInfo.

Acele supraîncărcări ale metodei Compare() care nu includ un parametru de tip StringComparison efectuează o comparație a șirurilor de caractere care ține cont de majuscule și cultură. Și în acele variante supraîncărcate care nu conțin un parametru de tip CultureInfo, informațiile despre mediul cultural sunt determinate de mediul de rulare curent.

Tipul StringComparison este o enumerare care definește valorile prezentate în tabelul de mai jos. Folosind aceste valori, puteți crea comparații de șiruri care se potrivesc nevoilor aplicației dvs. specifice. Prin urmare, adăugarea unui parametru de tip StringComparison extinde capacitățile metodei Compare() și ale altor metode de comparare, cum ar fi Equals(). Acest lucru face, de asemenea, posibilă indicarea fără ambiguitate a modului în care se intenționează să fie comparate șirurile.

Din cauza diferențelor dintre comparațiile de șiruri sensibile din punct de vedere cultural și comparațiile ordinale, este important să fim cât mai precis posibil în acest sens.

Valori definite în enumerarea StringComparison
Sens Descriere
CurrentCulture Comparațiile de șiruri sunt făcute folosind setările actuale ale mediului cultural
CurrentCultureIgnoreCase Comparațiile de șiruri sunt făcute folosind setările curente de cultură, dar nu sunt sensibile la majuscule și minuscule
InvariantCulture Comparațiile de șiruri se fac folosind cele imuabile, adică date universale despre mediul cultural
InvariantCultureIgnoreCase Comparațiile de șiruri se fac folosind cele imuabile, adică date culturale universale și insensibile la majuscule și minuscule
Ordinal Comparațiile de șiruri se fac folosind valorile ordinale ale caracterelor din șir. În acest caz, ordinea lexicografică poate fi perturbată, iar convențiile adoptate într-un anumit mediu cultural sunt ignorate
OrdinalIgnoreCase Comparațiile de șiruri se fac folosind valorile ordinale ale caracterelor din șir, dar nu sunt sensibile la majuscule și minuscule

În orice caz, metoda Compare() returnează o valoare negativă dacă primul șir comparat este mai mic decât al doilea; pozitiv dacă primul șir comparat este mai mare decât al doilea; și, în final, zero dacă ambele șiruri comparate sunt egale. Deși metoda Compare() returnează zero dacă șirurile comparate sunt egale, în general este mai bine să folosiți metoda Equals() sau operatorul == pentru a determina dacă șirurile de caractere sunt egale.

Faptul este că metoda Compare() determină egalitatea șirurilor comparate pe baza ordinii lor de sortare. Astfel, dacă se face o comparație culturală între șiruri, ambele șiruri pot fi aceleași în ordinea lor de sortare, dar nu sunt egale în substanță. În mod implicit, egalitatea șirurilor este determinată în metoda Equals(), pe baza valorilor ordinale ale caracterelor și fără a ține cont de mediul cultural. Prin urmare, în mod implicit, ambele șiruri sunt comparate în această metodă pentru egalitate absolută, caracter cu caracter, similar cu modul în care se face în operatorul ==.

În ciuda versatilității mari a metodei Compare(), pentru comparații ordinale simple ale șirurilor de caractere este mai ușor să se folosească metoda CompareOrdinal(). În cele din urmă, rețineți că metoda CompareTo() efectuează doar comparații de șiruri sensibile din punct de vedere cultural.

Următorul program demonstrează utilizarea metodelor Compare(), Equals(), CompareOrdinal() și a operatorilor == și != pentru a compara șirurile de caractere. Rețineți că primele două exemple de comparație demonstrează în mod clar diferențele dintre comparațiile de șiruri sensibile din punct de vedere cultural și comparațiile ordinale într-un mediu vorbitor de limba engleză:

Utilizarea sistemului; Exemplu de clasă ( static void Main() ( șir str1 = "alfa"; șir str2 = "Alfa"; șir str3 = "Beta"; șir str4 = "alfa"; șir str5 = "alfa, beta"; rezultat int; / / Mai întâi, demonstrează diferențele dintre comparația de șiruri sensibilă la cultură // și rezultatul comparației ordinale = String.Compare(str1, str2, StringComparison.CurrentCulture); Console.Write("Comparație de șiruri sensibile la cultură: "); if (rezultat 0) ) Console.WriteLine(str1 + " mai mare decât " + str2); altfel Console.WriteLine(str1 + " egal cu " + str2); rezultat = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write(" Linii de comparație ordinale: "); if (rezultat 0) Console.WriteLine(str1 + "mai mare decât " + str2); else Console.WriteLine(str1 + " egal cu " + str4); // Utilizați rezultatul metodei CompareOrdinal() = String.CompareOrdinal( str1, str2); Console.Write("Compararea șirurilor folosind metoda CompareOrdinal():\n"); if (rezultat 0) Console.WriteLine(str1 + " mai mare decât " + str2); else Console .WriteLine(str1 + " egal cu " + str4); Console.WriteLine(); // Determinați egalitatea șirurilor folosind operatorul == // Aceasta este o comparație ordinală a șirurilor de caractere if (str1 == str4) Console.WriteLine(str1 + " == " + str4); // Definiți inegalitatea liniilor folosind operatorul != if(str1 != str3) Console.WriteLine(str1 + " != " + str3); if(str1 != str2) Consola.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Efectuați o comparație ordinală a șirurilor de caractere care nu ține seama de majuscule // folosind metoda Equals() if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Comparație de șiruri folosind metoda Equals() cu " + "Parametrul OrdinalIgnoreCase: \n" + str1 + " este egal cu " + str2); Console.WriteLine(); // Comparați părți ale șirurilor de caractere if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Comparați șirurile ținând cont de mediul cultural actual:" + "\n3 primele caractere ale șirului " + str2 + " mai mult decât primele 3 caractere ale liniei " + str5); ) ) )

Rularea acestui program produce următorul rezultat:

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva