Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Krahasimi i simboleve në si. Puna me vargje

Deklarimi i vargjeve

Një varg C është një grup njëdimensional i karaktereve, elementi i fundit i të cilit është një varg me fund të pavlefshëm (string i përfunduar me null).

Deklarimi i një variabli të tipit string në gjuhën C është i mundur në tre mënyra, dy prej të cilave inicializojnë vargun gjatë deklarimit.

Mënyra e parë:

Deklaratat e grupit të karaktereve (mos harroni të shtoni hapësirë ​​për null pasues):

Char s;

Mënyra e dytë:

Cakto një vlerë fillestare për një variabël vargu (në këtë rast, përpiluesi mund të llogarisë vetë gjatësinë e vargut):

Char s = "Shembull i inicializimit të vargut";

Një konstante vargu shkruhet në të djathtë të shenjës së caktimit. Një zero ('\ 0') shtohet automatikisht në fund të rreshtit. Konstantet e vargut të karaktereve vendosen në një klasë memorie statike.

Mënyra e tretë:

Një tregues i nënkuptuar se një grup është duke u përdorur. Në të majtë të shenjës së caktimit është një tregues për një simbol:

Char * s = "Opsioni i dytë i inicializimit";

Ndryshorja s do të jetë një tregues për vendndodhjen në RAM ku ndodhet konstanta e vargut. Ekziston një gabim i mundshëm në këtë formë shënimi, që është se një tregues për një karakter shpesh quhet varg. Hyrja më poshtë është vetëm një tregues për një karakter, pasi nuk ka hapësirë ​​për vendosjen e vargut:

Char * s;

Futja e një vargu nga një pajisje standarde hyrëse (tastierë)

Ekziston një grup funksionesh për të punuar me vargje. Për hyrje nga një pajisje hyrëse standarde (tastierë), funksionet e bibliotekës nga moduli standard hyrje-dalje përdoren më shpesh: scanf dhe merr.

Për të futur një varg duke përdorur një funksion scanf, përdor formatin « % s» , dhe vini re se asnjë shenjë adrese nuk përdoret përpara identifikuesit të vargut « & » meqenëse grupi njëdimensional tashmë përfaqësohet nga një tregues në fillimin e tij:

Scanf ("% s", s);

Funksioni merr () lexon karaktere derisa të arrijë një karakter të linjës së re. Funksioni pranon të gjithë karakteret deri në karakterin e furnizimit të linjës, por nuk e përfshin atë. Një zero pasuese ('\ 0') është bashkangjitur në fund të rreshtit. Funksioni merr () vendos sekuencën e karaktereve të lexuara nga tastiera në një parametër të tipit string dhe kthen një tregues në këtë varg (nëse operacioni ishte i suksesshëm), ose NULL (në rast gabimi). Në shembullin e mëposhtëm, pas përfundimit të suksesshëm të operacionit, dy rreshta identike do të shfaqen në ekran:

#përfshi int main () (char s; char * p; p = merr (s); printf ("\ n vargu% s u fut.", s); nëse (p) printf ("\ n vargu% s u fut.", p); kthe 0;)

Në kalim, vërejmë se funksioni merr shpesh përdoret për të futur çdo të dhënë nga tastiera si një varg me qëllim të konvertimit të mëtejshëm të funksionit sscanf në formatin e dëshiruar ose për analizën paraprake të të dhënave hyrëse, për shembull:

#përfshi #përfshi #përfshi int main () (char s; int x, err; do (printf ("\ n Fut një numër të plotë ->"); merr (s); err = sscanf (s, "% d", & x); nëse ( err ! = 1) printf ("\ n Gabim në hyrje.");) Ndërsa (gabim! = 1); printf ("\ n Numri i plotë i futur ->% d", x); kthe 0;)

Dalja e linjave në dalje standarde (ekrani i monitorit)

Dy funksione mund të përdoren për të nxjerrë vargjet në dalje standarde (ekrani i monitorit) printf dhe ... Në funksionin printf, "% s" kalohet si format. Lehtësia e përdorimit të këtij funksioni qëndron në faktin se përveç një vargu, mund të nxirrni menjëherë të dhëna të llojeve të tjera. Veçori e veçorisë qëndron në faktin se pas daljes së linjës, kalimi në rreshtin tjetër ndodh automatikisht.

Funksionet për të punuar me vargje

Biblioteka e vargjeve ofrohet për konvertimin e vargjeve në gjuhën C. Secili prej funksioneve ka formatin e vet të regjistrimit (prototip).

Funksionet më të përdorura janë trajtuar në këtë artikull. - lexo

Një shembull i programeve (listimit) që punojnë me vargje

34

--- C # Manual --- Strings

Për sa i përket programimit të rregullt, vargu lloji i të dhënave të vargutështë një nga më të rëndësishmet në C #. Ky lloj përcakton dhe mbështet vargjet e karaktereve. Në një numër të gjuhëve të tjera programimi, një varg është një grup karakteresh. Dhe në C #, vargjet janë objekte. Prandaj, lloji i vargut është një lloj referimi.

Ndërtimi i vargjeve

Mënyra më e lehtë për të ndërtuar një varg karakteresh është përdorimi i një vargu literal. Për shembull, linja e mëposhtme e kodit cakton variablin e referencës së vargut str në referencën literale të vargut:

String str = "Starg mostër";

Në këtë rast, ndryshorja str inicializohet me sekuencën e karaktereve "Shargu Shembull". Ju gjithashtu mund të krijoni një objekt të tipit varg nga një grup i tipit char. Për shembull:

Char chararray = ("e", "x", "a", "m", "p", "l", "e"); string str = varg i ri (chararray);

Pasi të krijohet një objekt i tipit string, ai mund të përdoret kudo ku kërkohet një varg teksti i cituar.

Qëndrueshmëria e vargut

Mjaft e çuditshme, përmbajtja e një objekti të tipit string nuk mund të ndryshohet. Kjo do të thotë që pasi të krijohet, sekuenca e karaktereve nuk mund të ndryshohet. Por ky kufizim kontribuon në një zbatim më efikas të vargjeve të karaktereve. Prandaj, ky, në shikim të parë, disavantazh i dukshëm në fakt kthehet në një avantazh. Pra, nëse kërkohet një varg si variacion i një vargu ekzistues, atëherë për këtë qëllim duhet të krijohet një varg i ri që përmban të gjitha ndryshimet e nevojshme. Dhe meqenëse objektet e vargjeve të papërdorura grumbullohen automatikisht mbeturina, as nuk duhet të shqetësoheni për fatin e vargjeve të panevojshme.

Sidoqoftë, duhet theksuar se referencat e vargut të variablave (d.m.th., objektet e tipit string) janë subjekt ndryshimi dhe për këtë arsye ato mund t'i referohen një objekti tjetër. Por përmbajtja e vetë objektit të vargut nuk ndryshon pas krijimit të tij.

Le të shqyrtojmë një shembull:

Void statik addNewString () (string s = "Kjo është goditja ime"; s = "Kjo është goditje e re";)

Le të përpilojmë aplikacionin dhe të ngarkojmë asamblenë që rezulton në programin ildasm.exe. Figura tregon kodin CIL që do të gjenerohet për metodën void addNewString ():

Vini re se ka thirrje të shumta në kodin optik ldstr (ngarkesa e linjës). Ky kod optik CIL ldstr udhëzon të ngarkojë një objekt të ri vargu në grumbullin e menaxhuar. Si rezultat, objekti i mëparshëm që përmbante vlerën "This is my stroke" përfundimisht do të mblidhet mbeturina.

Puna me vargje

Në klasë Sistemi.String ofrohet një grup metodash për përcaktimin e gjatësisë së të dhënave të karaktereve, gjetjen e një nënvargu në vargun aktual, konvertimin e karaktereve nga shkronja të mëdha në të vogla dhe anasjelltas, etj. Ne do ta shikojmë këtë klasë në më shumë detaje në vijim.

Fusha e vargut, Indeksuesi dhe Vetia

Klasa String ka një fushë të vetme të përcaktuar:

String publik statik vetëm për lexim Bosh;

Fusha Empty tregon një varg bosh, d.m.th. një varg që nuk përmban karaktere. Kjo është në kontrast me një referencë boshe të vargut, e cila thjesht i bëhet një objekti joekzistent.

Përveç kësaj, klasa String përcakton një indeksues të vetëm vetëm për lexim:

Shënoni publikisht këtë (merrni;)

Ky indeksues ju lejon të merrni karakterin në indeksin e specifikuar. Indeksimi i vargjeve, si vargjet, fillon me zero. Objektet e vargut janë të qëndrueshëm dhe të pandryshueshëm, kështu që ka kuptim që klasa String të mbështesë një indeksues vetëm për lexim.

Më në fund, klasa String përcakton një veti të vetme vetëm për lexim:

Gjatësia e inteve publike (merr;)

Vetia Length kthen numrin e karaktereve në një varg. Shembulli i mëposhtëm tregon përdorimin e një indeksuesi dhe vetisë Length:

Përdorimi i Sistemit; Klasa Shembull (static void Main () (string str = "String Simple"; // Merrni gjatësinë e vargut dhe karakterin e 6-të në varg duke përdorur indeksuesin Console.WriteLine ("Gjatësia e vargut është (0), karakteri i 6-të është" (1) "" , str.Gjatësia, str);))

Operatorët e klasës së vargut

Klasa String mbingarkon dy operatorët e mëposhtëm: == dhe! =. Operatori == përdoret për të testuar dy vargje karakteresh për barazi. Kur operatori == aplikohet në referencat e objekteve, ai zakonisht kontrollon për të parë nëse të dy referencat janë bërë në të njëjtin objekt. Dhe kur operatori == zbatohet për referencat e objekteve të tipit String, atëherë përmbajtja e vetë vargjeve krahasohet për barazi. E njëjta gjë vlen edhe për operatorin!=. Kur zbatohet për referenca për objektet e tipit String, përmbajtja e vargjeve në vetvete krahasohet për pabarazi. Në të njëjtën kohë, operatorë të tjerë relacionalë, duke përfshirë =, krahasojnë referencat me objektet e tipit String në të njëjtën mënyrë si me objektet e llojeve të tjera. Dhe për të kontrolluar nëse një varg është më i madh se tjetri, duhet të thërrisni metodën Krahasoni (), e cila përcaktohet në klasën String.

Siç do të bëhet e qartë, shumë krahasime të vargjeve të karaktereve përdorin informacion kulturor. Por kjo nuk vlen për operatorët == dhe! =. Në fund të fundit, ata thjesht krahasojnë vlerat rendore të karaktereve në vargje. (Me fjalë të tjera, ata krahasojnë vlerat binare të karaktereve që nuk janë modifikuar kulturalisht, d.m.th., të kulturuara.) Prandaj, këta operatorë kryejnë krahasime të vargjeve në një mënyrë të pandjeshme ndaj rasteve dhe kulturës.

Metodat e klasës së vargut

Tabela e mëposhtme rendit disa nga metodat më interesante të kësaj klase, të grupuara sipas qëllimit:

Metodat për të punuar me vargje
Metoda Struktura dhe mbingarkesat Emërimi
Krahasoni vargjet
Krahaso () int statike publike Krahaso (strA string, string strB)

Krahaso publik statik int (strA string, string strB, bool ignoreCase)

Krahasimi statik publik (strA string, string strB, StringComparison Type krahasimi)

Krahasimi statik publik (strA string, string strB, bool ignoreCase, CultureInfo Culture)

Metoda statike, krahason vargun strA me vargun strB. Jep një vlerë pozitive nëse strA është më e madhe se strB; vlerë negative nëse vargu strA është më i vogël se vargu strB; dhe zero nëse strA dhe strB janë të barabarta. Krahasimi është i ndjeshëm ndaj rasteve dhe i ndjeshëm nga ana kulturore.

Nëse ignoreCase është vlera Boolean e vërtetë, krahasimi injoron ndryshimin midis shkronjave të mëdha dhe të vogla. Përndryshe, këto dallime merren parasysh.

Parametri ComparationType specifikon një mënyrë specifike për të krahasuar vargjet. Klasa CultureInfo përcaktohet në hapësirën e emrave System.Globalization.

int statike publike Krahaso (strA, int indexA, varg strB, int indexB, gjatësi int)

Krahasoni int statike publike (strA, int indexA, varg strB, int indexB, gjatësia int, bool ignoreCase)

Krahasimi publik statik int (vargu strA, int indexA, vargu strB, int indexB, gjatësia int, Lloji i krahasimit të vargut)

Krahaso int statike publike (strA, int indexA, varg strB, int indexB, gjatësia int, bool ignoreCase, Kultura e CultureInfo)

Krahason pjesët e vargjeve strA dhe strB. Krahasimi fillon me elementët e vargut strA dhe strB dhe përfshin numrin e karaktereve të specifikuara nga parametri i gjatësisë. Metoda kthen një vlerë pozitive nëse pjesa e vargut strA është më e madhe se pjesa e vargut strB; vlerë negative nëse një pjesë e vargut strA është më e vogël se një pjesë e vargut strB; dhe zero nëse pjesët e krahasuara të strA dhe strB janë të barabarta. Krahasimi është i ndjeshëm ndaj rasteve dhe i ndjeshëm nga ana kulturore.

Krahasoni rendore () int statike publike KrahasimiOrdinal (strA string, vargu strB)

Int statike publike CompareOrdinal (strA strA, int indexA, string strB, int indexB, int count)

Bën të njëjtën gjë si metodën Krahaso (), por shpërfill cilësimet lokale

Krahaso me () publike int CompareTo (vlera e objektit)

Krahason vargun thirrës me paraqitjen e vargut të objektit të vlerës. Kthen një vlerë pozitive nëse vargu thirrës është më i madh se vlera e vargut; vlerë negative nëse vargu thirrës është më i vogël se vlera e vargut; dhe zero nëse vargjet e krahasuara janë të barabarta

publike int CompareTo (strB string)

Krahason vargun thirrës me vargun strB

E barabartë () anulimi publik bool Është i barabartë (objekt obj)

E kthen vlerën Boolean true nëse vargu thirrës përmban të njëjtën sekuencë karakteresh si paraqitja e vargut të obj. Kryen një krahasim rendor të ndjeshëm ndaj rasave, por të pandjeshëm ndaj kulturës

bool publike Është e barabartë (vlera e vargut)

Bool publike është e barabartë (vlera e vargut, Lloji i krahasimit të vargut)

E kthen vlerën Boolean true nëse vargu thirrës përmban të njëjtën sekuencë karakteresh si vlera e vargut. Bëhet një krahasim rendor i ndjeshëm ndaj rasteve, por i pandjeshëm ndaj kulturës. Parametri ComparationType përcakton një mënyrë specifike për të krahasuar vargjet

bool statike publike Është e barabartë (vargu a, vargu b)

Bool statike publike Është e barabartë (vargu a, vargu b, Lloji i krahasimit të vargut)

E kthen vlerën boolean true nëse vargu a përmban të njëjtën sekuencë karakteresh si vargu b. Bëhet një krahasim rendor i ndjeshëm ndaj rasteve, por i pandjeshëm ndaj kulturës. Parametri ComparationType përcakton një mënyrë specifike për të krahasuar vargjet

Lidh (bashkoj) vargjet
Concat () string publik statik Concat (string str0, string str1);

string publik statik Concat (params vlerat e vargut);

Kombinon shembuj të veçantë të vargjeve në një varg (lidhje)
Kërko në varg
Përmban () bool publik Përmban (vlera e vargut) Një metodë që ju lejon të përcaktoni nëse një varg përmban një nënvarg (vlerë) të veçantë
FillonMe () bool publike StartsWith (vlera e vargut)

Bool publike StartsWith (vlera e vargut, Lloji i krahasimit të vargut)

E kthen vlerën boolean true nëse vargu thirrës fillon me vlerën e nënvargut. Përndryshe, vlera Boolean false kthehet. Parametri ComparationType specifikon se si kryhet kërkimi.

PërfundonMe () bool publik EndsWith (vlera e vargut)

Bool publike EndsWith (vlera e vargut, Lloji i krahasimit të vargut)

E kthen vlerën boolean true nëse vargu thirrës përfundon me vlerën e nënvargut. Përndryshe, ai kthen vlerën boolean false. Parametri ComparationType specifikon një metodë specifike kërkimi

Indeksi i () IndexOf publik (vlera e karakterit)

Int int publik IndexOf (vlera e vargut)

Gjen shfaqjen e parë të një nënvargu ose karakteri të caktuar në një varg. Nëse karakteri ose nënvargu i dëshiruar nuk gjendet, atëherë vlera -1 kthehet

publik int IndexOf (vlera char, int startIndex)

Int publik IndexOf (vlera e vargut, int startIndex)

Int int Publik IndexOf (vlera char, int startIndex, int count)

Int int publik IndexOf (vlera e vargut, int startIndex, int count)

Rikthen indeksin e shfaqjes së parë të karakterit ose vlerës së nënvargut në vargun thirrës. Kërkimi fillon me elementin në indeksin startIndex dhe shtrihet mbi numrin e elementeve të identifikuar nga numërimi (nëse ofrohet). Metoda kthen -1 nëse karakteri i kërkimit ose nënvargu nuk gjendet

Indeksi i Fundit () Versionet e mbingarkuara janë të ngjashme me metodën IndexOf ().

Njësoj si IndexOf, por gjen shfaqjen e fundit të një karakteri ose nënvargu, jo të parën

IndexOfAny () int int publik IndexOfAny (char anyOf)

Int int Public IndexOfAny (char anyOf, int startIndex)

Int int Public IndexOfAny (char anyOf, int startIndex, int count)

Kthen indeksin e shfaqjes së parë të çdo karakteri në grupin anyOf që gjendet në vargun thirrës. Kërkimi fillon në elementin në indeksin startIndex dhe përfshin numrin e elementeve të identifikuar nga numërimi (nëse ka). Metoda kthen -1 nëse nuk gjendet asnjë përputhje me ndonjë nga karakteret nga grupi anyOf. Kontrolli kryhet në mënyrë të rregullt.

Indeksi i Fundit i Cilido Versionet e mbingarkuara janë të ngjashme me metodën IndexOfAny ().

Kthen indeksin e shfaqjes së fundit të çdo karakteri nga grupi anyOf që gjendet në vargun thirrës

Ndarja dhe bashkimi i vargjeve
Ndarë Ndarja e vargut publik (ndarësi i shenjave params)

Ndarja e vargut publik (params ndarës i karaktereve, numërimi int)

Një metodë që kthen një varg vargjesh me nënvargje të pranishme në këtë rast, të ndara nga njëri-tjetri nga elementë nga grupi i specifikuar char ose vargu.

Në formën e parë të metodës Split (), vargu thirrës ndahet në pjesët përbërëse të tij. Si rezultat, kthehet një grup që përmban nënvargjet e marra nga vargu thirrës. Karakteret që kufizojnë këto nënvargje kalohen në grupin ndarës. Nëse grupi ndarës është bosh ose i referohet një vargu bosh, atëherë një hapësirë ​​përdoret si ndarës i nënvargut. Dhe në formën e dytë të kësaj metode, kthehet numri i nënvargjeve të specifikuara nga parametri count.

Ndarja e vargut publik (ndarësi i shenjave, opsionet e StringSplitOptions)

Ndarja e vargut publik (ndarësi i vargut, opsionet e StringSplitOptions)

Ndarja e vargut publik (ndarësi i shenjave, numërimi int, opsionet e StringSplitOptions)

Ndarja e vargut publik (ndarësi i vargjeve, numërimi int, opsionet e StringSplitOptions)

Në dy format e para të metodës Split (), vargu thirrës ndahet në pjesë dhe kthehet një varg që përmban nënvargjet e marra nga vargu thirrës. Karakteret që ndajnë këto nënvargje kalohen në grupin ndarës. Nëse grupi ndarës është bosh, atëherë një hapësirë ​​përdoret si ndarës. Dhe në formën e tretë dhe të katërt të kësaj metode, kthehet numri i rreshtave, i kufizuar nga parametri i numërimit.

Por në të gjitha format, parametri i opsioneve tregon një mënyrë specifike për të trajtuar linjat boshe që krijohen kur dy ndarës janë krah për krah. Vetëm dy vlera janë përcaktuar në numërimin e StringSplitOptions: Asnje dhe RemoveEmptyEntries... Nëse opsionet janë Asnjë, vargjet boshe përfshihen në rezultatin përfundimtar të ndarjes së vargut origjinal. Dhe nëse parametri i opsioneve është vendosur në RemoveEmptyEntries, atëherë vargjet boshe përjashtohen nga rezultati përfundimtar i ndarjes së vargut origjinal.

Bashkohu () bashkimi i vargut statik publik (ndarësi i vargut, vlera e vargut)

Vargu statik publik Join (ndarësi i vargut, vlera e vargut, int startIndex, int count)

Ndërton një varg të ri duke kombinuar përmbajtjen e një vargu vargjesh.

Forma e parë e metodës Join () kthen një varg të përbërë nga nënvargjet e bashkuara të kaluara në grupin e vlerave. Forma e dytë kthen gjithashtu një varg të përbërë nga nënvargjet e kaluara në grupin e vlerave, por ato janë të lidhura në një numër të caktuar numërimesh, duke filluar nga elementi i grupit të vlerave. Në të dy format, çdo rresht pasues ndahet nga rreshti i mëparshëm nga një ndarës i specifikuar nga parametri ndarës.

Linjat e mbushjes dhe zvogëlimit
Prerje () Prerja e vargut publik ()

Prerja e vargut publik (params char trimChars)

Një metodë që ju lejon të hiqni të gjitha dukuritë e një grupi specifik karakteresh nga fillimi dhe fundi i linjës aktuale.

Në formën e parë të metodës Trim (), hapësirat kryesore dhe pasuese hiqen nga vargu thirrës. Dhe forma e dytë e kësaj metode heq dukuritë kryesore dhe pasuese në vargun e karaktereve thirrëse nga grupi trimChars. Në të dyja format, vargu që rezulton kthehet.

PadLeft () varg publik PadLeft (int totalWidth)

Vargu publik PadLeft (int totalWidth, char paddingChar)

Ju lejon të mbushni vargun me karaktere në të majtë.

Forma e parë e metodës PadLeft () fut hapësira në anën e majtë të linjës thirrëse në mënyrë që gjatësia totale e saj të jetë e barabartë me vlerën e parametrit totalWidth. Dhe në formën e dytë të kësaj metode, karakteret e shënuara me parametrin paddingChar futen nga ana e majtë e linjës thirrëse në mënyrë që gjatësia totale e saj të jetë e barabartë me vlerën e parametrit totalWidth. Në të dyja format, vargu që rezulton kthehet. Nëse gjerësia totale është më e vogël se gjatësia e vargut thirrës, kthehet një kopje e vargut thirrës të pandryshuar.

PadRight () Njësoj si PadLeft ()

Ju lejon të mbushni vargun me karaktere në të djathtë.

Futni, fshini dhe zëvendësoni vargjet
Fut () Fut vargun publik (int startIndex, vlera e vargut)

Përdoret për të futur një rresht në një tjetër, ku vlera tregon rreshtin që duhet futur në rreshtin thirrës në indeksin startIndex. Metoda kthen vargun që rezulton.

Hiq () vargun publik Hiq (int startIndex)

Hiq vargun publik (indeksi i fillimit int, numërimi int)

Përdoret për të hequr një pjesë të një vargu. Në formën e parë të metodës Remove (), heqja kryhet duke filluar nga vendi i treguar nga startIndex dhe duke vazhduar deri në fund të rreshtit. Dhe në formën e dytë të kësaj metode, numri i karaktereve të specifikuara nga parametri i numërimit hiqet nga vargu, duke filluar nga pozicioni i treguar nga indeksi startIndex.

Zëvendësoni () vargu publik Zëvendëso (char oldChar, char newChar)

Zëvendësimi i vargut publik (vargu i vjetërVlera, vargu i riVlera)

Përdoret për të zëvendësuar një pjesë të një vargu. Në formën e parë të metodës Replace (), të gjitha shfaqjet e OldChar në vargun thirrës zëvendësohen me newChar. Dhe në formën e dytë të kësaj metode, të gjitha shfaqjet e vargut oldValue në vargun thirrës zëvendësohen me vargun newValue.

Ndryshimi i rastit
E sipërme () vargu publik Topper ()

Shkruan të gjitha shkronjat në vargun thirrës.

Tower () vargu publik ToLower ()

Të gjitha shkronjat e vogla në vargun thirrës.

Marrja e një nënvargu nga një varg
Nënstring () Nënstring i vargut publik (int startIndex)

Nënstring i vargut publik (Int startIndex, int length)

Në formën e parë të metodës Substring (), nënvargu merret nga pozicioni i treguar nga parametri startIndex deri në fund të vargut thirrës. Dhe forma e dytë e kësaj metode nxjerr një nënvarg që përbëhet nga numri i karaktereve të specifikuara nga parametri i gjatësisë, duke filluar nga vendi i treguar nga parametri startIndex.

Shembulli i mëposhtëm i programit përdor disa nga metodat e mësipërme:

Përdorimi i Sistemit; duke përdorur System.Collections.Generic; duke përdorur System.Linq; duke përdorur System.Text; namespace ConsoleApplication1 (programi i klasës (programi statik i zbrazët (kryesore e vargut) (// Krahasoni dy rreshtat e parë string s1 = "ky është një varg"; vargu s2 = "ky është tekst dhe ky është një varg"; nëse (String. CompareOrdinal (s1, s2) ! = 0) Console.WriteLine ("Strings s1 dhe s2 nuk janë të barabarta"); nëse (String.Compare (s1, 0, s2, 13, 10, true) == 0) Console.WriteLine ("Në të njëjtën kohë, ata kanë të njëjtin tekst "); // Lidhja e vargjeve Console.WriteLine (String.Concat (" \ n "+" Një, dy "," tre, katër ")); // Kërko në një string // Shfaqja e parë e një nënvargu if (s2. IndexOf ("this")! = -1) Console.WriteLine ("Fjala \" this \ "u gjet në rresht, është" + "at: (0 ) pozicion", s2.IndexOf ("this")); / / Ndodhja e fundit e nënvargut if (s2.LastIndexOf ("this")! = -1) Console.WriteLine ("Ndodhja e fundit e fjalës \" kjo \ "është" + "në (0) pozicion", s2.LastIndexOf ("this" )); // Kërko nga një grup karakteresh char myCh = ("Y", "x", "t"); nëse ( s2.IndexOfAny (myCh)! = -1) Console.WriteLine ("Një nga karakteret nga grupi ch "+" i gjetur në aktual rreshti në pozicionin (0) ", s2.IndexOfAny (myCh)); // Përcaktoni nëse vargu fillon me një nënvarg të caktuar if (s2.StartsWith ("ky është tekst") == true) Console.WriteLine ("Substring u gjet!"); // Përcaktoni nëse vargu përmban një nënvarg // duke përdorur shembullin e përcaktimit të vargut të OS të përdoruesit myOS = Environment.OSVersion.ToString (); if (myOS.Contains ("NT 5.1")) Console.WriteLine ("Sistemi juaj operativ është Windows XP"); else if (myOS.Contains ("NT 6.1")) Console.WriteLine ("Sistemi juaj operativ Windows 7"); Console.ReadLine (); )))

Pak për krahasimin e vargjeve në C #

Nga të gjitha operacionet e përpunimit të vargut të karaktereve, ka të ngjarë që një varg të krahasohet me një tjetër. Para se të shqyrtojmë ndonjë metodë për krahasimin e vargjeve, duhet theksuar sa vijon: krahasimet e vargjeve mund të kryhen në .NET Framework në dy mënyra kryesore:

    Së pari, krahasimi mund të pasqyrojë zakonet dhe normat e një mjedisi të caktuar kulturor, të cilat shpesh janë mjedise kulturore që hyjnë në fuqi kur programi ekzekutohet. Kjo është sjellje standarde për disa, por jo të gjitha, metodat e krahasimit.

    Dhe së dyti, krahasimi mund të bëhet pavarësisht nga cilësimet e mjedisit kulturor vetëm nga vlerat rendore të personazheve që përbëjnë vargun. Në përgjithësi, krahasimet e vargjeve të neglizhuara kulturalisht përdorin rend leksikografik (dhe konsiderata gjuhësore) për të përcaktuar nëse një varg është më i madh, më i vogël ose i barabartë me një varg tjetër. Në një krahasim rendor, vargjet thjesht renditen bazuar në vlerën e pandryshuar të çdo karakteri.

Për shkak të metodave të ndryshme të krahasimit kulturor dhe rendor për krahasimet e vargjeve dhe implikimeve të secilit krahasim të tillë, rekomandohet fuqimisht që të ndiqni praktikat më të mira të ofruara aktualisht nga Microsoft. Në fund të fundit, zgjedhja e mënyrës së gabuar për të krahasuar vargjet mund të çojë në funksionim të gabuar të programit kur përdoret në një mjedis që ndryshon nga ai në të cilin është zhvilluar.

Zgjedhja se si të krahasohen vargjet e karaktereve është një vendim shumë i rëndësishëm. Si rregull i përgjithshëm dhe pa përjashtim, krahasimi i vargjeve kulturalisht i përshtatshëm duhet të zgjidhet nëse është për qëllimin e shfaqjes së rezultatit te përdoruesi (për shembull, për të shfaqur një seri vargjesh të renditura sipas rendit leksikografik). Megjithatë, nëse vargjet përmbajnë informacion fiks që nuk është menduar të modifikohet për të përshtatur dallimet kulturore, të tilla si një emër skedari, fjalë kyçe, adresë uebsajti ose vlerë sigurie, atëherë duhet të zgjidhni një krahasim rendor të vargut. Sigurisht, specifikat e një aplikacioni të caktuar që po zhvillohet do të diktojnë zgjedhjen e një mënyre të përshtatshme për të krahasuar vargjet e karaktereve.

Klasa String ofron një shumëllojshmëri metodash të krahasimit të vargjeve, të cilat janë renditur në tabelën e mësipërme. Më e gjithanshme prej tyre është metoda Krahaso (). Ju lejon të krahasoni dy vargje tërësisht ose pjesërisht, të ndjeshme ndaj shkronjave të vogla ose të pandjeshme, mënyra e krahasimit të përcaktuar nga parametri i tipit Krahasimi i vargjeve si dhe informacioni i kulturës i dhënë me një parametër tipi CultureInfo.

Mbingarkesat e Compare () që nuk përmbajnë një parametër të tipit StringComparison kryejnë një krahasim të ndjeshëm ndaj shkronjave dhe kulturës të vargjeve të karaktereve. Dhe në ato variante të mbingarkuar që nuk përmbajnë një parametër të llojit CultureInfo, informacioni i kulturës përcaktohet nga koha aktuale e ekzekutimit.

Lloji StringComparison është një numërim që përcakton vlerat e paraqitura në tabelën më poshtë. Duke përdorur këto vlera, ju mund të organizoni krahasime të vargjeve për t'iu përshtatur nevojave të aplikacionit tuaj të veçantë. Prandaj, shtimi i një parametri të tipit StringComparison zgjeron metodën Compare () dhe metoda të tjera krahasimi si Equals (). Gjithashtu bën të mundur që të tregohet pa mëdyshje se si supozohet të krahasohen vargjet.

Për shkak të dallimeve midis krahasimeve të vargjeve të ndjeshme ndaj kulturës dhe krahasimeve rendore, është shumë e rëndësishme të jemi sa më të saktë në këtë drejtim.

Vlerat e përcaktuara në numërimin e StringComparison
Kuptimi Përshkrim
Kultura aktuale Krahasimet e vargjeve bëhen duke përdorur cilësimet aktuale të kulturës
CurrentCultureIgnoreCase Krahasimet e vargjeve bëhen duke përdorur cilësimet aktuale të kulturës, por jo të ndjeshme ndaj shkronjave të vogla
Kulturë e pandryshueshme Krahasimi i vargjeve bëhet duke përdorur të pandryshueshme, d.m.th. të dhëna universale për mjedisin kulturor
InvariantCultureIgnoreCase Krahasimi i vargjeve bëhet duke përdorur të pandryshueshme, d.m.th. të dhëna universale për mjedisin kulturor dhe të pandjeshme ndaj rasteve
rendore Krahasimet e vargjeve bëhen duke përdorur vlerat rendore të karaktereve në varg. Në këtë rast mund të cenohet rendi leksikografik dhe të shpërfillen konventat e miratuara në një mjedis të veçantë kulturor.
OrdinalIgnoreCase Krahasimi i vargjeve kryhet duke përdorur vlerat rendore të karaktereve në varg, por jo sensitive

Në secilin rast, metoda Compare () kthen një vlerë negative nëse vargu i parë që krahasohet është më i vogël se i dyti; vlerë pozitive nëse vargu i parë i krahasuar është më i madh se i dyti; dhe në fund zero nëse të dy vargjet që krahasohen janë të barabartë. Megjithëse metoda Compare () kthen zero nëse vargjet që krahasohen janë të barabarta, në përgjithësi është më mirë të përdoret metoda Equals () ose operatori == për të përcaktuar nëse vargjet e karaktereve janë të barabarta.

Çështja është se metoda Compare () përcakton barazinë e vargjeve të krahasuara bazuar në renditjen e tyre. Për shembull, nëse po i krahasoni vargjet në një mënyrë të ndjeshme ndaj kulturës, atëherë të dy vargjet mund të jenë të njëjta sipas renditjes së tyre, por jo në thelb të barabartë. Si parazgjedhje, barazia e vargut përcaktohet në metodën Equals () bazuar në vlerat rendore të karaktereve dhe është kulturalisht e pandjeshme. Prandaj, si parazgjedhje, të dy vargjet krahasohen në këtë metodë për barazi absolute, karakter pas karakteri, ashtu si në operatorin ==.

Megjithëse metoda Compare () është më e gjithanshme, është më e lehtë të përdoret metoda CompareOrdinal () për krahasime të thjeshta rendore të vargjeve të karaktereve. Së fundi, mbani në mend se metoda CompareTo () krahason vetëm vargjet e kulturës.

Programi i mëposhtëm demonstron përdorimin e metodave Compare (), Equals (), CompareOrdinal () dhe operatorëve == dhe! = për të krahasuar vargjet e karaktereve. Vini re se dy shembujt e parë të krahasimit ilustrojnë ndryshimin midis krahasimeve të vargjeve me ndjeshmëri kulturore dhe krahasimeve rendore në anglisht:

Përdorimi i Sistemit; Klasa Shembull (zbrazëti statike kryesore () (string str1 = "alfa"; vargu str2 = "Alfa"; vargu str3 = "Beta"; vargu str4 = "alfa"; vargu str5 = "alfa, beta"; rezultati int; / / Së pari, demonstroni ndryshimin midis krahasimit të vargjeve të vetëdijshëm për kulturën dhe rezultatit të krahasimit rendor = String.Compare (str1, str2, StringComparison.CurrentCulture); Console.Write ("Krahasimi i vargjeve të vetëdijshëm për kulturën:"); nëse (rezultati 0 ) Konsola .WriteLine (str1 + "më e madhe se" + str2); tjetër Console.WriteLine (str1 + "e barabartë me" + str2); rezultat = String.Compare (str1, str2, StringComparison.Ordinal); Console.Write ("Krahasimi rendor rreshtat: "); nëse (rezultati 0) Console.WriteLine (str1 +" më i madh se "+ str2); tjetër Console.WriteLine (str1 +" i barabartë me "+ str4); // Përdorni metodën CompareOrdinal () rezultat = String .CompareOrdinal ( str1, str2); Console.Write ("Krahaso vargjet duke përdorur metodën CompareOrdinal (): \ n"); nëse (rezultati 0) Console.WriteLine (str1 + "më shumë" + str2); tjetër Console.WriteLine ( rr 1 + "e barabartë" + str4); Console.WriteLine (); // Përcaktoni barazinë e vargjeve duke përdorur operatorin == // Ky është një krahasim rendor i vargjeve të karaktereve nëse (str1 == str4) Console.WriteLine (str1 + "==" + str4); // Përcaktoni pabarazinë e vargut duke përdorur operatorin = If (str1! = Str3) Console.WriteLine (str1 + "! =" + Str3); if (str1! = str2) Console.WriteLine (str1 + "! =" + str2); Console.WriteLine (); // Kryeni një krahasim rendor të vargjeve pa ndjeshmëri ndaj shkronjave // ​​duke përdorur metodën Equals () if (String.Equals (str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine ("Krahasimi i vargjeve duke përdorur metodën Equals () me" + "Parametri OrdinalIgnoreCase: \ n "+ str1 +" është i barabartë me "+ str2); Console.WriteLine (); // Krahasoni pjesët e vargjeve nëse (String.Compare (str2, 0, str5, 0, 3, StringComparison.CurrentCulture)> 0) (Console.WriteLine ("Krahaso vargjet bazuar në kulturën aktuale:" + "\ n3 karakteret e para i rreshtit "+ str2 +" është më i madh se 3 karakteret e para të vargut "+ str5);)))

Ekzekutimi i këtij programi prodhon rezultatin e mëposhtëm:

Standardi modern C ++ përcakton një klasë me funksione dhe veti (ndryshore) për organizimin e punës me vargje (në gjuhën klasike C nuk ka vargje si të tilla, ka vetëm vargje char):

#përfshi

#përfshi

#përfshi

Për të punuar me vargjet, duhet gjithashtu të lidhni hapësirën standarde të emrave:

Përdorimi i hapësirës së emrave std;

Përndryshe, do të duhet të specifikoni përshkruesin e klasës std :: string në vend të vargut kudo.

Më poshtë është një shembull i një programi që funksionon me varg (nuk funksionon në përpiluesit e vjetër të përputhshëm me C!):

#përfshi #përfshi #përfshi duke përdorur hapësirën e emrave std; int main () (string s = "Test"; s.insert (1, "!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->fshij (s2-> fund ()); cout<< s2->c_str (); cin.get (); kthimi 0; )

Karakteristikat kryesore të klasës së vargjeve:

  • inicializimi me një grup karakteresh (një varg i tipit të integruar) ose një objekt tjetër të tipit varg. Lloji i integruar nuk ka opsionin e dytë;
  • kopjimi i një rreshti në tjetrin. Për një lloj të integruar, duhet të përdorni funksionin strcpy ();
  • qasje në karaktere individuale të vargut për lexim dhe shkrim. Në një grup të integruar, kjo bëhet duke përdorur funksionin e marrjes së indeksit ose adresimit indirekt duke përdorur një tregues;
  • krahasimi i dy vargjeve për barazi. Për llojet e integruara, përdoren funksionet e familjes strcmp ();
  • bashkim (lidhje) i dy vargjeve, duke dhënë rezultatin ose si varg i tretë, ose në vend të njërit prej atyre origjinale. Për një lloj të integruar, përdoret funksioni strcat (), por për të marrë rezultatin në një linjë të re, duhet të përdorni në mënyrë sekuenciale funksionet strcpy () dhe strcat (), dhe gjithashtu të kujdeseni për shpërndarjen e kujtesës;
  • mjete të integruara për përcaktimin e gjatësisë së një vargu (funksionet e anëtarit të madhësisë së klasës () dhe gjatësisë l ()). Ju mund ta zbuloni gjatësinë e një vargu të një lloji të integruar vetëm duke llogaritur duke përdorur funksionin strlen ();
  • aftësia për të gjetur nëse një varg është bosh.

Le t'i hedhim një vështrim më të afërt këtyre veçorive themelore.

Inicializimi i vargjeve kur përshkruani dhe gjatësia e linjës(duke mos përfshirë terminatorin null përfundimtar):

String st ("Stargu im \ n"); cout<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";

Vargu mund të jepet dhe të zbrazet:

String st2;

Për të kontrolluar nëse a është rreshti bosh, mund ta krahasoni gjatësinë e tij me 0:

Nëse (! St.size ()) // bosh

ose përdorni metodën e zbrazët (), duke e kthyer true për një varg bosh dhe false për një varg jo bosh:

Nëse (st.zbrazët ()) // bosh

Forma e tretë e krijimit të vargut inicializon një objekt të tipit string me një objekt tjetër të të njëjtit lloj:

String st3 (st);

Vargu st3 inicializohet me vargun st. Si mund të sigurohemi që këto vargjet përputhen? Le të përdorim operatorin e krahasimit (==):

Nëse (st == st3) // inicializimi funksionoi

Si kopjoni një rresht në tjetrin? Me operacionin e zakonshëm të caktimit:

St2 = st3; // kopjoni st3 në st2

Për lidhja e vargut përdorni veprimin e mbledhjes (+) ose operacionin e caktimit të mbledhjes (+ =). Le të jepen dy rreshta:

Vargu s1 ("përshëndetje"); vargu s2 ("bota \ n");

Mund të marrim rreshtin e tretë, i përbërë nga lidhja e dy të parave, si kjo:

Vargu s3 = s1 + s2;

Nëse duam të shtojmë s2 në fund të s1, duhet të shkruajmë:

S1 + = s2;

Operacioni i mbledhjes mund të bashkojë objektet e klasës varg jo vetëm mes tyre, por edhe me vargje të tipit inline. Ju mund ta rishkruani shembullin e mësipërm në mënyrë që karakteret speciale dhe shenjat e pikësimit të përfaqësohen nga lloji i integruar char * dhe fjalët domethënëse të përfaqësohen nga objektet e vargut:

Const char * pc = ","; vargu s1 ("përshëndetje"); vargu s2 ("bota"); vargu s3 = s1 + pc + s2 + "\ n"; cout<< endl << s3;

Shprehje si këto funksionojnë sepse përpiluesi "e di" se si të konvertojë automatikisht objektet e tipit të integruar në objekte të klasës së vargut. Një caktim i thjeshtë i një vargu inline në një objekt vargu është gjithashtu i mundur:

Vargu s1; const char * pc = "një grup karakteresh"; s1 = pc; // djathtas

Në këtë rast, transformimi i kundërt nuk punon... Përpjekja për të bërë inicializimin e mëposhtëm të një vargu të tipit të integruar do të shkaktojë një gabim përpilimi:

Char * str = s1; // gabim përpilimi

Për të kryer këtë konvertim, duhet të thërrisni në mënyrë eksplicite funksionin e anëtarit c_str () ("varg C"):

Const char * str = s1.c_str ();

Funksioni c_str () kthen një tregues në një grup karakteresh që përmban vargun e objektit të vargut siç do të ishte në një lloj vargu të integruar. Fjala kyçe const këtu parandalon "të rrezikshmen" në mjediset moderne vizuale mundësinë e modifikimit të drejtpërdrejtë të përmbajtjes së një objekti përmes një treguesi.

TE personazhe individuale një objekt i tipit string, si një tip i integruar, mund të aksesohet duke përdorur funksionin e marrjes së indeksit. Për shembull, këtu është një copë kodi që zëvendëson të gjitha pikat me nënvizat:

String str ("www.disney.com"); madhësia int = str.madhësia (); për (int i = 0; i< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Replace (rr.fillim (), str.fund (), ".", "_");

Vërtetë, nuk përdoret metoda e zëvendësimit të klasës së vargut, por algoritmi me të njëjtin emër:

#përfshi

Për shkak se objekti i vargut sillet si një enë, algoritme të tjera mund të aplikohen në të. Kjo ju lejon të zgjidhni probleme që nuk zgjidhen drejtpërdrejt nga funksionet e klasës së vargut.

Më poshtë është një përshkrim i shkurtër i operatorëve dhe funksioneve kryesore të klasës së vargjeve, lidhjet në tabelë çojnë në përshkrime në gjuhën ruse në internet. Për një listë më të plotë të aftësive të klasës së vargjeve, shihni, për shembull, Wikipedia ose cplusplus.com.

Përcaktimi i karaktereve në një varg

operator =

cakton vlera në një varg

caktoj

cakton karaktere në një varg

Qasja në simbole individuale

duke marrë karakterin e specifikuar duke kontrolluar nëse indeksi është jashtë kufijve

operatori

duke marrë karakterin e specifikuar

para

duke marrë personazhin e parë

mbrapa

merrni karakterin e fundit

të dhëna

kthen një tregues në karakterin e parë të vargut

c_str

kthehet i pamodifikueshëm një grup karakteresh C që përmban karakteret në varg

Kontrollimi i kapacitetit të linjës

bosh

kontrollon nëse një varg është bosh

madhësia
gjatësia

kthen numrin e karaktereve në një varg

madhësia max

kthen numrin maksimal të karaktereve

rezervë

rezervon hapësirë ​​për ruajtje

Operacionet e vargut

qartë

pastron përmbajtjen e vargut

fut

duke futur simbole

fshij

fshini karakteret

push_mbrapa

duke shtuar një karakter në fund të rreshtit

pop_back

heq karakterin e fundit

shtoj

operator + =

shton karaktere në fund të rreshtit

krahasojnë

krahason dy vargje

zëvendësojnë

zëvendëson çdo dukuri të karakterit të specifikuar

nënstr

kthen një nënvarg

kopje

kopjon personazhet

ndryshoni përmasat

ndryshon numrin e karaktereve të ruajtura

Programuesi thotë:

Përshëndetje! E lexova artikullin tuaj. Isha shumë e trishtuar dhe qesharake në të njëjtën kohë. Kjo frazë e juaja është veçanërisht vrasëse: "Meqenëse një variabël i tipit char përdoret shpesh si grup, përcaktohet numri i vlerave të mundshme". 😆 😆 😆
Nuk po qesh me ty. Ndërtimi i një faqe interneti është me të vërtetë një sukses. Unë thjesht dua t'ju mbështes me këshilla dhe të tregoj disa gabime.

1. Vlera e një ndryshoreje të tipit char caktohet si më poshtë:

Këtu:

Char a = * "A";

Treguesi i grupit është i paadresuar dhe, si rezultat, kthehet vlera e elementit të parë të grupit, d.m.th. 'A'

2. Zeroizimi bëhet si më poshtë:

Char a = NULL;
char b = ();

// Dhe kështu pastrohet linja në trupin e programit

"" - ky karakter quhet një terminator null. Vendoset në fund të rreshtit. Ju vetë, pa e ditur, mbushët grupin s1 nga artikulli juaj me këtë simbol. Por ishte e mundur të caktohej ky simbol vetëm në elementin zero të grupit.

3. Mos ngurroni të përdorni terminologjinë.
Shenja = është një operacion caktimi.
Shenja * është një operacion thirrës.
E kam fjalën për këtë fragment të artikullit: "Gjithçka doli të ishte kaq e thjeshtë, përpara shenjës = duhej të vendosje një shenjë * dhe duhet të deklaroje numrin e elementit (zero korrespondon me të parin)"

Mos më keqkuptoni, artikulli si qëndron nuk mund të ekzistojë. Mos u bëni dembel, rishkruajeni atë.
Ju keni një përgjegjësi të madhe! E kam seriozisht. Faqet e faqes suaj u përfshinë në faqen e parë të rezultateve të kërkimit Yandex. Shumë njerëz tashmë kanë filluar të përsërisin gabimet pas jush.

Paç fat! Ju mund ta përballoni atë!

:
Unë e di këtë për një kohë të gjatë, thjesht është e vështirë të rilexosh 200 artikuj gjatë gjithë kohës për të rregulluar diçka. Dhe disa tipa të vrazhdë shkruajnë në atë mënyrë që edhe duke ditur se çfarë është më mirë të rregullohet, nuk ka fare dëshirë për ta rregulluar.

Do të jem i lumtur të rregulloj edhe gabime të tjera. korrigjoni pasaktësitë nëse shfaqen. E vleresoj ndihmen tuaj. Faleminderit. Unë e di këtë për një kohë të gjatë, thjesht është e vështirë të rilexosh 200 artikuj gjatë gjithë kohës për të rregulluar diçka. Dhe disa tipa të vrazhdë shkruajnë në atë mënyrë që edhe duke ditur se çfarë është më mirë të rregullohet, nuk ka fare dëshirë për ta rregulluar.
Me karakterin tuaj b = (); Kjo nuk është fare zero. do të kishte kontrolluar të paktën b.
nëse flasim për karakterin null ""; E dija shumë mirë kur e plotësoja linjën me ta dhe qëllimi ishte të tregoja një pastrim të vërtetë, dhe jo të dukshëm për syrin, sepse linja përfshin mbeturina, të cilat ndonjëherë i pengojnë. Ju do të jeni më të kujdesshëm me termat vetë, "karakter me përfundim të pavlefshëm" ose thjesht "karakter i pavlefshëm", jo një terminator))) Dhe karakteri terminator tingëllon thjesht i lezetshëm.

Po e modernizoj artikullin, por nuk do të kaloj në stilin e dikujt tjetër. Nëse mendoj se për një fillestar është më e qartë kështu, dhe jo ashtu siç dëshiron, atëherë do ta lë kështu. Edhe ju mos me keqkuptoni. Fjala "shenjë" është shumë më e lehtë për një fillestar të dobët për të kuptuar dhe mbajtur mend sesa përkufizimi dhe emri i secilës shenjë. Nuk ka absolutisht asnjë gabim në këtë, shenja është - shenja. Më pak theks në një gjë jep më shumë theks në tjetrin.

Do të jem i lumtur të rregulloj edhe gabime të tjera. korrigjoni pasaktësitë nëse shfaqen. E vleresoj ndihmen tuaj. Faleminderit.

Pershendetje perseri!
Dua të sqaroj. Termi "zero-terminator" (terminator) është përdorur nga mësuesi im në universitet. Me sa duket kjo është shkolla e vjetër!
Sa i përket linjave anuluese.
char b = (); Kjo është me të vërtetë zero. I gjithë grupi është i mbushur me zero. Mos e besoni - shikoni!
Nëse marrim parasysh një varg në kuptimin e tij natyror, të përditshëm, atëherë "bosh" do të jetë vargu në të cilin nuk ka asnjë karakter të vetëm. Prandaj, në 99.9% të rasteve, mjafton të parashtrohet një karakter null. Zakonisht, përpunimi i një vargu shkon deri në karakterin e parë null, dhe cilat karaktere e ndjekin atë nuk është më e rëndësishme. E kuptoj që ke dashur të zero vargun. Sapo vendosa të ofroj një version klasik të testuar me kohë.

:
Kur "Zakonisht përpunimi i vargut shkon deri në karakterin e parë të pavlefshëm dhe karakteret që ndjekin nuk është më i rëndësishëm" - po, vargu rivendoset në zero
Nëse marrim parasysh "zeroizimin real të të gjitha qelizave në varg (për të cilin kam shkruar)" - jo, jo zero, dhe madje edhe karakteri i parë nuk është zero. E kontrollova këtë opsion. MinGW (CodeBlock) - i gjithë grupi jep karakterin "a"
Nuk mendoj se kjo është një arsye për polemika.

Përditësimi i fundit: 31.10.2015

Lidhja

Lidhja ose bashkimi i vargut mund të bëhet duke përdorur funksionin + ose duke përdorur metodën Concat:

String s1 = "përshëndetje"; vargu s2 = "botë"; vargu s3 = s1 + "" + s2; // rezultat: string "hello world" string s4 = String.Concat (s3, "!!!"); // rezultat: vargu "përshëndetje botë !!!" Console.WriteLine (s4);

Metoda Concat është një metodë statike e klasës String që merr dy vargje si parametra. Ka edhe versione të tjera të metodës që marrin një numër të ndryshëm parametrash.

Metoda Join mund të përdoret gjithashtu për të lidhur vargje:

Vargu s5 = "mollë"; string s6 = "një ditë"; string s7 = "mban"; string s8 = "një mjek"; string s9 = "larg"; vlerat e vargut = varg i ri (s5, s6, s7, s8, s9); String s10 = String.Join ("", vlerat); // rezultat: vargu "molla në ditë mban një mjek larg"

Metoda Join është gjithashtu statike. Versioni i metodës së përdorur më sipër merr dy parametra: një varg ndarës (në këtë rast, një hapësirë) dhe një grup vargjesh që do të lidhen dhe ndahen nga një ndarës.

Krahasoni vargjet

Metoda statike e Krahasimit përdoret për të krahasuar vargjet:

String s1 = "përshëndetje"; vargu s2 = "botë"; int rezultat = String.Krahaso (s1, s2); nëse (rezultati<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result >0) (Console.WriteLine ("Rreshti s1 vjen pas rreshtit s2");) tjetër (Console.WriteLine ("Linjat s1 dhe s2 janë identike");) // rezultati do të jetë "Rreshti s1 përpara rreshtit s2"

Ky version i metodës Krahaso merr dy vargje dhe kthen një numër. Nëse rreshti i parë është alfabetikisht më i lartë se i dyti, atëherë kthehet një numër më i vogël se zero. Përndryshe, kthehet një numër më i madh se zero. Dhe rasti i tretë - nëse vargjet janë të barabarta, atëherë numri 0 kthehet.

Në këtë rast, meqenëse karakteri h alfabetikisht është më i lartë se karakteri w, atëherë edhe rreshti i parë do të jetë më i lartë.

Kërko në varg

Duke përdorur metodën IndexOf, ne mund të përcaktojmë indeksin e shfaqjes së parë të një karakteri ose nënvargu të vetëm në një varg:

String s1 = "përshëndetje botë"; char ch = "o"; int indexOfChar = s1.IndexOf (ch); // është e barabartë me 4 Console.WriteLine (indexOfChar); string subString = "wor"; int indexOfSubstring = s1.IndexOf (nënString); // është e barabartë me 6 Console.WriteLine (indexOfSubstring);

Metoda LastIndexOf funksionon në një mënyrë të ngjashme, ajo gjen vetëm indeksin e shfaqjes së fundit të një karakteri ose nënvargu në një varg.

Një grup tjetër metodash ju lejon të zbuloni nëse një varg fillon ose mbaron me një nënvarg specifik. Metodat StartsWith dhe EndsWith janë krijuar për këtë. Për shembull, ne kemi një detyrë për të hequr të gjithë skedarët me shtesën exe nga një dosje:

Rruga e vargut = @ "C: \ SomeDir"; skedarët e vargut = Directory.GetFiles (rruga); për (int i = 0; i< files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

Ndarja e vargjeve

Me funksionin Split, ne mund të ndajmë një varg në një grup nënvargjesh. Si parametër, funksioni Split pranon një grup karakteresh ose vargjesh që do të shërbejnë si ndarës. Për shembull, le të numërojmë numrin e fjalëve në një term duke e ndarë atë me hapësirën e bardhë:

String text = "Dhe kjo është arsyeja pse ndodhi kështu"; varg fjalë = tekst.Ndarje (karakter i ri ("")); foreach (vargu s në fjalë) (Console.WriteLine (s);)

Kjo nuk është mënyra më e mirë për t'u ndarë sipas hapësirave, pasi ne mund të kemi disa hapësira të njëpasnjëshme në linjën hyrëse dhe hapësirat gjithashtu do të bien në grupin që rezulton, kështu që është më mirë të përdorim një version të ndryshëm të metodës:

Fjalët e vargut = tekst.Split (karakter i ri (""), StringSplitOptions.RemoveEmptyEntries);

Parametri i dytë StringSplitOptions.RemoveEmptyEntries thotë që të hiqen të gjitha nënvargjet boshe.

Prerja e një vargu

Përdorni funksionin Trim për të shkurtuar karakteret kryesore ose pasuese:

Teksti i vargut = "përshëndetje botë"; tekst = tekst.Trim (); // rezultat "hello world" text = text.Trim (new char ("d", "h")); // rezultat "ello worl"

Funksioni Trim pa parametra shkurton hapësirat kryesore dhe pasuese dhe kthen vargun e prerë. Për të specifikuar në mënyrë të qartë se cilat karaktere fillestare dhe mbaruese duhet të shkurtohen, ne mund t'i kalojmë funksionit një grup të atyre karaktereve.

Ky funksion ka homologë të pjesshëm: funksioni TrimStart shkurton karakteret fillestare dhe funksioni TrimEnd shkurton karakteret fundore.

Funksioni Substring ju lejon të prisni një pjesë specifike të një vargu:

String text = "Ditë e bukur"; // prerë duke filluar nga karakteri i tretë tekst = tekst.Nënvarg (2); // rezultati "dita e mirë" Console.WriteLine (tekst); // prerë nga fillimi në dy karakteret e fundit teksti = teksti.Nënstring (0, teksti. Gjatësia - 2); // rezultati është "i dashur" Console.WriteLine (tekst);

Funksioni Substring kthen gjithashtu vargun e prerë. Si parametër, versioni i parë i përdorur përdor indeksin nga i cili shkurtohet vargu. Versioni i dytë përdor dy parametra - indeksin e fillimit të prerjes dhe gjatësinë e pjesës së prerë të linjës.

Fut

Për të futur një rresht në tjetrin, përdorni funksionin Insert:

String text = "Ditë e bukur"; string subString = "i mrekullueshëm"; tekst = tekst.Insert (8, substring); Console.WriteLine (tekst);

Parametri i parë në funksionin Insert është indeksi në të cilin futet nënvargu, dhe parametri i dytë është nënvargu aktual.

Fshirja e rreshtave

Metoda Remove ndihmon për të hequr një pjesë të një vargu:

String text = "Ditë e bukur"; // indeksi i karakterit të fundit int ind = tekst.Gjatësia - 1; // prerë tekstin e karakterit të fundit = tekst.Hiq (ind); Console.WriteLine (tekst); // prerë dy karakteret e para text = text.Remove (0, 2);

Versioni i parë i metodës Remove pranon një indeks në vargun nga i cili hiqen të gjithë karakteret. Versioni i dytë pranon një parametër më shumë - sa karaktere për të hequr.

Zëvendësimi

Për të zëvendësuar një karakter ose nënvarg me një tjetër, zbatohet metoda Replace:

String text = "ditë e bukur"; tekst = tekst.Zëvendëso ("mirë", "keq"); Console.WriteLine (tekst); tekst = tekst.Zëvendëso ("rreth", ""); Console.WriteLine (tekst);

Në rastin e dytë të përdorimit të funksionit Replace, një varg me një simbol "o" zëvendësohet me një varg bosh, domethënë, në fakt hiqet nga teksti. Në mënyrë të ngjashme, është e lehtë të fshish disa tekste specifike në rreshta.

Ndryshimi i rastit

Për të kthyer një varg në shkronja të mëdha dhe të vogla, përdoren funksionet ToUpper () dhe ToLower (), përkatësisht:

String hello = "Përshëndetje botë!"; Console.WriteLine (hello.ToLower ()); // Përshendetje Botë! Console.WriteLine (hello.ToUpper ()); // PËRSHENDETJE BOTË!

Artikujt kryesorë të lidhur