Krahasimi i personazheve në shek. Hiqni një numër të caktuar karakteresh nga një varg

Puna me vargje. Klasa e vargut. Konstruktorët e klasave. Funksionet assign() , append() , insert() , replace() , erase() , find() , rfind() , compare() , c_str() . Shembuj

1. Cili është qëllimi i klasës string në programet C++?

Klasa e vargut është projektuar për të punuar me vargjet char*, të cilat janë vargje me përfundim null. Klasa e vargjeve u prezantua si Opsioni alternativ për punën me vargje të tipit char* . Linjat që përfundojnë me një karakter ‘\0’ quhen edhe vargjet C. Meqenëse vargu është një klasë, ju mund të deklaroni objekte të kësaj klase.

2. Cilat module (biblioteka) duhet të lidhen për të përdorur aftësitë e klasës së vargjeve në MS Visual Studio C++?

Për të përdorur aftësitë e klasës së vargjeve në MS Visual Studio (C++), duhet të përfshini bibliotekën dhe hapësira e emrave std.

#përfshi duke përdorur namespace std;
3. Si deklarohet një variabël i tipit string? Shembuj

Deklarimi i një variabli të tipit string bëhet në të njëjtën mënyrë si një ndryshore e rregullt. Variant i mundshem deklarata me inicializim të njëkohshëm.

// shkruani vargun e vargut s1; // variabël me emrin s1 të tipit string string s2 = "Kjo është një variabël vargu" ; // deklaratë me inicializim // duke përdorur një variabël të tipit string me një operator caktimi s1 = s2; // s1 = "Kjo është një variabël vargu" s2 = "Tekst i ri" ;
4. Cilat janë avantazhet dhe disavantazhet e përdorimit të klasës string krahasuar me tipin char*?

Krijimi i tipit të ri të vargut ishte për shkak të mangësive të punës me vargjet e karaktereve, të cilat i shfaqte tipi char*. Krahasuar me llojin char*, lloji i vargut ka këto përparësi kryesore:

  • aftësia për të përpunuar vargjet duke përdorur operatorë standardë C++ ( = , + , = = , <> dhe kështu me radhë.). Siç e dini, kur përdorni tipin char*, edhe operacionet më të thjeshta me vargje dukeshin të ndërlikuara dhe kërkonin shkrim të tepruar të kodit të programit;
  • sigurimi i besueshmërisë (sigurisë) më të mirë të kodit të programit. Për shembull, kur kopjoni vargjet, lloji i vargut siguron veprimet e duhura që mund të ndodhin nëse vargu burimor është më i madh se vargu i destinacionit;
  • duke siguruar një varg si një lloj të dhënash të pavarur. Deklarimi i llojit të vargut si varg është i njëjtë për të gjitha variablat në program, gjë që siguron konsistencën e të dhënave.

Disavantazhi kryesor i tipit string në krahasim me tipin char* është shpejtësia më e ngadaltë e përpunimit të të dhënave. Kjo për faktin se lloji i vargut është, në fakt, një klasë kontejneri. Dhe puna me një klasë kërkon zbatim shtesë të kodit të programit, i cili, nga ana tjetër, kërkon kohë shtesë.

5. Cilët operatorë mund të përdoren me objektet e klasës string?

Klasa e vargut është e përshtatshme sepse ju lejon të manipuloni me lehtësi vargjet duke përdorur operatorë standardë (të mbingarkuar).

Operatorët e mëposhtëm mund të përdoren me objekte të klasës string

  • = – detyrë
  • + – lidhje (bashkimi i vargjeve)
  • += – caktim me lidhje
  • == – barazi
  • != – pabarazia
  • < - më pak
  • <= - më pak ose e barabartë
  • > - më shumë
  • >= - më shumë ose e barabartë
  • – indeksimi

Shembull, që demonstron përdorimin e pohimeve të mësipërme

// lloji i vargut, operacionet në vargje vargu s1 = "s-1" ; vargu s2 = "s-2" ; vargu s3; bool b; // operacioni "=" (caktimi i vargut) s3 = s1; // s3 = "s-1" // Operacioni "+" - bashkimi i vargut s3 = s3 + s2; // s3 = "s-1s-2" // operacioni "+=" - caktimi me lidhje s3 = "s-3" ; s3 += "abc" ; // s3 = "s-3abc" // operacioni "==" - krahasimi i vargjeve b = s2==s1; // b = false b = s2=="s-2" ; // b = e vërtetë // operacioni "!=" - krahasimi i vargjeve (jo i barabartë) s1 = "s1" ; s2 = "s2" ; b = s1 != s2; // b = e vërtetë // operacionet "<" и ">" - krahasimi i vargjeve s1 = "abcd"; s2 = "de"; b = s1 > s2; // b = e rreme b = s1< s2; // b = true // operacionet "<=" и ">=" - krahasimi i vargjeve (më pak ose i barabartë, më i madh ose i barabartë) s1 = "abcd"; s2 = "ab"; b = s1 >= s2; // b = e vërtetë b = s1<= s2; // b = false b = s2 >= "ab"; // b = e vërtetë // operacion - indeksimi char c; s1 = "abcd"; c = s1; // c = "c" c = s1; // c = "a"
6. A përmban klasa string konstruktorë?

Ashtu si çdo klasë, klasa string ka një numër konstruktorësh. Ato kryesore janë këto:

String(); string (const char * str); string (const string & str);

7. Shembuj të inicializimit duke përdorur konstruktorë

Më poshtë janë shembuj të inicializimit të variablave të tipit të vargut

Vargu s1 ("Përshëndetje!"); string s2 = "Përshëndetje!" ; // inicializimi - vargu i konstruktorit (const char * str) char * ps = "Përshëndetje" ; vargu s3 (ps); // vargu i inicializimit s4(s3); // inicializimi - vargu i konstruktorit (string konst & str) vargu s5; // inicializimi - konstruktor string().

8. Caktimi i vargjeve. funksion assign(). Shembuj

Për të caktuar një varg te një tjetër, mund të përdorni një nga dy metodat:

  • përdorni operatorin e caktimit ‘=’ ;
  • përdorni funksionin assign() nga klasa string.

Funksioni assign() ka disa implementime të mbingarkuara.

Opsioni i parë është thirrja e një funksioni pa parametra

String &cakto(void);

Në këtë rast, ekziston një caktim i thjeshtë i një vargu në tjetrin.

Opsioni i dytë ju lejon të kopjoni një numër të caktuar karakteresh nga një varg:

String &cakto(konst string & s, size_type st, size_type num);

  • s – objekti nga i cili është marrë vargu burimor;
  • st – indeksi (pozicioni) në rreshtin nga i cili fillon kopjimi i karaktereve num;
  • num – numri i karaktereve që do të kopjohen nga pozicioni st;
  • madhësi_lloji – lloji rendor i të dhënave.

Varianti i tretë i funksionit assign() kopjon karakteret e para num të vargut s te thirrësi:

String & assign (konst char * s, size_type num);

  • s – një varg që përfundon me karakterin ‘\0’ ;
  • num është numri i karaktereve që kopjohen në objektin thirrës. Karakteret e para nume nga vargu s kopjohen.

Më poshtë është një shembull me implementime të ndryshme të funksionit assign().

Shembull.

// caktimi i vargjeve, funksioni assign(). string s1 = "site" ; vargu s2; vargu s3; char * ps = "site" ; s3 = s1; // s3 = "site" s2.cakto(s1); // s2 = "faqe" s2.cakto(s1, 0, 4); // s2 = "më e mira" s2.cakto(ps, 8); // s2 = "bestprog"
9. Kombinimi i vargjeve. Funksioni append(). Shembull

Funksioni append() përdoret për të lidhur vargjet. Ju gjithashtu mund të përdorni operacionin për të shtuar rreshta ‘+’ , Për shembull:

Vargu s1; vargu s2; s1 = "abc"; s2 = "def" ; s1 = s1 + s2; // s1 = "abcdef"

Sidoqoftë, funksioni append() është i mirë nëse duhet të bashkëngjitni një pjesë të një vargu.

Funksioni ka opsionet e mëposhtme të zbatimit:

String &append(konst string & s, size_type start); string &append(konst char * s, size_type num);

Në zbatimin e parë, funksioni merr një referencë për një objekt vargu s, e cila i shtohet objektit thirrës. Në zbatimin e dytë, funksioni merr një tregues në një varg të tipit const char *, i cili përfundon me karakterin '\0'.

Shembull. Demonstrimi i funksionit append().

String s1 = "abcdef" ; s2 = "1234567890" ; shtojca (s2, 3, 4); // s1 = "abcdef4567" char * ps = "1234567890" ; s1 = "abcdef" ; s1.shtoj(ps, 3); // s1 = "abcdef123"

10. Futja e karaktereve në një rresht. Funksioni insert(). Shembull

Për të futur një rresht në një pozicion të caktuar të një rreshti tjetër, duhet të përdorni funksionin insert(), i cili ka disa opsione zbatimi.

Versioni i parë i funksionit ju lejon të futni të gjithë vargun s në pozicionin e specifikuar të fillimit të linjës së thirrjes (objekti thirrës):

String & insert(size_type start, const string &s);

Versioni i dytë i funksionit ju lejon të futni një pjesë (parametrat insStart , num ) të vargut s në pozicionin e specifikuar të fillimit të linjës thirrëse:

String & insert(size_type start, const string &s, size_type insStart, size_type num);

Në funksionet e mësipërme:

  • s – një varg që futet në linjën thirrëse;
  • start – pozicioni në linjën thirrëse nga e cila është futur vargu s;
  • insStart – pozicioni në vargun s nga i cili ndodh futja;
  • num – numri i karaktereve në vargun s që futen nga pozicioni insStart.
string s1 = "abcdef" ; string s2 = "1234567890" ; s1.insert(3, s2); // s1 = "abc"+"1234567890"+"def"="abc1234567890def" s2.insert(2, s1, 1, 3); // s2 = "12bcd34567890"
11. Zëvendësimi i karaktereve në një varg. funksioni zëvendësues(). Shembull

Funksioni replace() zëvendëson karakteret në vargun thirrës. Funksioni ka opsionet e mëposhtme të zbatimit:

Vargu &zëvendëso(fillimi i llojit të madhësisë, numri i llojit të madhësisë, vargu konst &s); vargu &zëvendëso(fillimi i tipit_madhësi, numri_lloji_madhësor, vargu konst &s, lloji_madhësia replStart, lloji_madhësia replNum);

Në zbatimin e parë, vargu thirrës zëvendësohet me vargun s. Është e mundur të specifikoni pozicionin (fillimin) dhe numrin e karaktereve (num) në linjën thirrëse që duhet të zëvendësohen me vargun s.

Versioni i dytë i funksionit replace() ndryshon nga i pari në atë që lejon që vetëm një pjesë e vargut s të zëvendësohet nga vargu thirrës. Në këtë rast jepen dy parametra shtesë: pozicioni i replStart dhe numri i karaktereve në vargun s, të cilët formojnë një nënvarg që zëvendëson vargun thirrës.

Shembull. Demonstrimi i funksionit zëvendësues().

String s1 = "abcdef" ; string s2 = "1234567890" ; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890" ; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890" ; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" // zëvendësimi i karaktereve, funksioni i zëvendësimit (). string s1 = "abcdef" ; string s2 = "1234567890" ; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890" ; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890" ; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" s2 = "1234567890" ; s2.replace(5, 1, s1, 2, 3); // s2 = "12345cde7890" s2 = "1234567890" ; s2.replace(4, 2, s1, 0, 4); // s2 = "1234abcd7890"

12. Heqja e një numri të caktuar karakteresh nga një varg. funksioni erase(). Shembull

Për të hequr karakteret nga vargu thirrës, përdorni funksionin erase():

String & fshij(indeksi i llojit të madhësisë=0, numri i llojit të madhësisë = npos);

  • indeksi – indeksi (pozicioni) nga i cili dëshironi të hiqni karakteret në linjën e thirrjes;
  • num – numri i karaktereve që hiqen.

Shembull.

String s = "01234567890" ; s.fshij (3, 5); // s = "012890" s = "01234567890" ; s.fshij(); // s = ""

13. Kërkoni për një karakter në një varg. Funksionet Find() dhe rfind(). Shembuj

Në klasën e vargut, kërkimi i një vargu në një nënvarg mund të bëhet në dy mënyra, të cilat ndryshojnë në drejtimin e kërkimit:

  • duke skanuar vargun nga fillimi në fund duke përdorur funksionin find();
  • duke skanuar vargun nga fundi në fillim me funksionin rfind().

Prototipi i funksionit find() duket si ky:

Gjetja e llojit të madhësisë (vargu konst &s, fillimi i llojit të madhësisë = 0) konst ;

  • s është nënvargu që kërkohet në vargun që thërret këtë funksion. Funksioni kërkon shfaqjen e parë të vargut s. Nëse në vargun s gjendet në vargun që ka thirrur këtë funksion, atëherë kthehet pozicioni i ndodhjes së parë. Përndryshe -1 kthehet;

Prototipi i funksionit rfind() duket si ky:

Lloji_madhësi rfind(string konst &s, madhësi_lloji nisje = npos) const ;

  • s është nënvargu që kërkohet në vargun thirrës. Kërkimi për një nënvarg në një varg kryhet nga fundi në fillim. Nëse nënvargu s gjendet në vargun thirrës, atëherë funksioni kthen pozicionin e ndodhjes së parë. Përndryshe, funksioni kthen -1;
  • npos – pozicioni i karakterit të fundit të linjës thirrëse;
  • start – pozicioni nga i cili kryhet kërkimi.

Shembulli 1. Një fragment kodi që demonstron rezultatin e funksionit find().

// shkruani vargun, funksionin gjeni() string s1 = "01234567890" ; vargu s2 = "345" ; string s3 = "abcd" ; int pos; pos = s1.gjeni(s2); // pos = 3 pos = s1.gjeni(s2, 1); // pos = 3 pos = s1.find("jklmn" , 0); // pos = -1 pos = s1.gjeni(s3); // pos = -1 pos = s2.gjeni(s1); // pos = -1

Shembulli 2. Demonstrimi i funksionit rfind().

// lloji i vargut, funksionet find() dhe rfind(). string s1 = "01234567890" ; vargu s2 = "345" ; string s3 = "abcd" ; string s4 = "abcd---abcd" ; int pos; pos = s1.rfind(s2); // pos = 3 pos = s1.rfind(s2, 12); // pos = 3 pos = s1.rfind(s2, 3); // pos = 3 pos = s1.rfind(s2, 2); // pos = -1 pos = s2.rfind(s1); // pos = -1 pos = s1.rfind(s3, 0); // pos = -1 // ndryshimi midis funksioneve find() dhe rfind(). pos = s4.rfind(s3); // pos = 7 pos = s4.gjeni(s3); // pos = 0
14. Krahasimi i pjesëve të vargjeve. funksioni krahaso(). Shembull

Meqenëse lloji i vargut është një klasë, mund të përdorni operacionin për të krahasuar dy vargje me njëri-tjetrin ‘= =’ . Nëse të dy vargjet janë të njëjta, atëherë rezultati i krahasimit do të jetë i vërtetë. Përndryshe, rezultati i krahasimit do të jetë i rremë.

Por nëse duhet të krahasoni një pjesë të një vargu me një tjetër, atëherë funksioni compare() ofrohet për këtë.

Prototipi i funksionit compare():

int compare(size_type start, size_type num, const string &s) const ;
  • s – vargu që krahasohet me vargun thirrës;
  • start – pozicioni (indeksi) në vargun s nga i cili fillon shikimi i karaktereve të vargut për krahasim;
  • num është numri i karaktereve në vargun s që krahasohen me vargun thirrës.

Funksioni funksionon si më poshtë. Nëse vargu thirrës është më i vogël se vargu s, atëherë funksioni kthen -1 ( kuptim negativ). Nëse vargu thirrës është më i madh se vargu s, funksioni kthen 1 (një vlerë pozitive). Nëse dy vargje janë të barabarta, funksioni kthen 0.

Shembull. Demonstrimi i funksionit compare():

// lloji i vargut, funksioni krahaso(). string s1 = "012345" ; string s2 = "0123456789" ; int res; res = s1.krahaso(s2); // res = -1 res = s1.krahaso("33333" ); // res = -1 res = s1.krahaso("012345"); // res = 0 res = s1.krahaso("345"); // res = -1 res = s1.krahaso(0, 5, s2); // res = -1 res = s2.krahaso(0, 5, s1); // res = -1 res = s1.krahaso(0, 5, "012345"); // res = -1 res = s2.krahaso(s1); // res = 1 res = s2.krahaso("456" ); // res = -1 res = s2.krahaso("000000"); // res = 1
15. Marrja e një vargu me karakterin e fundit të rreshtit ‘\0’ (char * ). Funksioni c_str() . Shembull

Për të marrë një varg që përfundon me karakterin ‘\0’ Përdoret funksioni c_str().

Prototipi i funksionit:

const char * c_str() const ;

Funksioni deklarohet me modifikuesin konst. Kjo do të thotë që funksioni nuk mund të modifikojë objektin thirrës (string).

Shembulli 1. Konvertimi i llojit të vargut në const char * .

// shkruani vargun, funksionin c_str() string s = "abcdef" ; const char * ps; ps = s.c_str(); // ps = "abcdef"

Shembulli 2.

Më poshtë është një demonstrim i konvertimit të një vargu nga vargu në System::Lloji i vargut për ta shfaqur atë në një kontroll Label

Përditësimi i fundit: 31/10/2015

Lidhja

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

String s1 = "përshëndetje"; string 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ë bashkuar vargjet:

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 ndarësi.

Krahasimi i vargjeve

Për të krahasuar vargjet, përdorni metodën statike të Krahasimit:

String s1 = "përshëndetje"; string 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"); ) else ( Console.WriteLine ("Rreshtat s1 dhe s2 janë identike"); ) // rezultati do të jetë "Rreshti s1 para rreshtit s2"

Ky version i metodës Krahasimi merr dy vargje dhe kthen një numër. Nëse vargu 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 është alfabetikisht më i lartë se karakteri w, rreshti i parë do të jetë më i lartë.

Kërkoni në një 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); // e barabartë me 4 Console.WriteLine(indexOfChar); string subString = "wor"; int indexOfSubstring = s1.IndexOf(nënvarg); // e barabartë me 6 Console.WriteLine(indexOfSubstring);

Metoda LastIndexOf funksionon në një mënyrë të ngjashme, përveçse gjen 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 apo 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ë fshirë 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 vargut

Duke përdorur funksionin Split ne mund të ndajmë një varg në një grup nënvargjesh. Funksioni Split merr një grup karakteresh ose vargjesh si parametër, të cilët do të shërbejnë si kufizues. Për shembull, le të numërojmë numrin e fjalëve në një term duke e ndarë atë me karaktere të hapësirës së bardhë:

String text = "Dhe kjo është arsyeja pse gjithçka ndodhi"; fjalët e vargut = teksti.Split(new char ( " " )); foreach (vargu me 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ë vargun e hyrjes dhe grupi që rezulton do të përmbajë gjithashtu hapësira, kështu që është më mirë të përdorim një version tjetër të metodës:

String words = text.Split(new char ( " " ), StringSplitOptions.RemoveEmptyEntries);

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

Prerja e një linje

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

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

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

Ky funksion ka analoge të pjesshme: funksioni TrimStart shkurton karakteret fillestare dhe funksioni TrimEnd shkurton karakteret fundore.

Shkurtoje pjesë e caktuar Funksioni Substring lejon vargjet:

String text = "Kalofshi një ditë të mbarë"; // prerë duke u nisur nga teksti i karakterit të tretë = teksti.Substring(2); // rezultat "dita e mirë" Console.WriteLine(tekst); // prerë së pari në dy karakteret e fundit text = text.Substring(0, text.Length - 2); // rezultat "roshy de" Console.WriteLine(tekst);

Funksioni Substring kthen gjithashtu vargun e cunguar. Versioni i parë i përdorur përdor indeksin si parametër, duke filluar nga i cili duhet të shkurtohet vargu. Versioni i dytë përdor dy parametra - indeksin e fillimit të prerjes dhe gjatësinë e pjesës së prerë të vargut.

Fut

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

String text = "Kalofshi një ditë të mbarë"; string subString = "i mrekullueshëm"; tekst = tekst.Insert(8, substring); Console.WriteLine(tekst);

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

Heqja e rreshtave

Metoda Remove ndihmon në heqjen e një pjese të një vargu:

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

Versioni i parë i metodës Remove merr një indeks në varg, duke filluar nga i cili duhet të hiqen të gjithë karakteret. Versioni i dytë merr një parametër më shumë - sa karaktere duhet të hiqen.

Zëvendësimi

Për të zëvendësuar një karakter ose nënvarg me një tjetër, përdorni metodën Replace:

String text = "dita e mirë"; tekst = tekst.Replace("mirë", "keq"); Console.WriteLine(tekst); tekst = tekst.Replace("o", ""); Console.WriteLine(tekst);

Në rastin e dytë të përdorimit të funksionit Replace, një varg me një karakter "o" zëvendësohet me një varg bosh, domethënë hiqet nga teksti. Kjo metodë e bën të lehtë fshirjen e tekstit specifik në rreshta.

Ndrysho rastin

Për të kthyer një varg në shkronja të mëdha dhe të vogla, përdorni 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Ë!

p»їAgjencia e besueshme SEO India mund të rrisë të ardhurat e bizneseve të vogla

80% e përdoruesve kërkojnë në Google dhe motorë të tjerë kërkimi përpara se të bëjnë një blerje dhe më shumë se 50% e kërkesave të krijuara përmes motorëve të kërkimit konvertohen. Këto dy statistika vërtetojnë rëndësinë e Optimizimit të Motorit të Kërkimit. Ka shumë statistika dhe fakte të tilla që bëjnë një pikë të qartë: çdo biznes i vogël, i mesëm ose i madh ka nevojë për shërbime profesionale SEO. Bizneset e vogla dhe startup-et shpesh përballen me probleme buxhetore. Ata mund të marrin ndihmën e çdo agjencie të besueshme SEO nga India për të marrë shërbimin më të mirë SEO në buxhetin e tyre për të rritur të ardhurat e tyre.
Kërkimi ka një ndikim të madh në mendjet e konsumatorëve. Sipas statistikave të ndryshme të shpërndara nga ekspertët kryesorë të optimizimit të motorëve të kërkimit në faqet e internetit të ndryshme të autorizuara si Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot, etj. SEO kap shumicën e drejtimeve. Gjithashtu, drejtimet që vijnë nga rezultatet e kërkimit organik kanë një normë më të lartë konvertimi. Këto statistika dhe sjellja e konsumatorëve bëjnë një pikë më të qartë se shërbimi më i mirë SEO nuk është një luks, por një domosdoshmëri për çdo biznes.
Për të anashkaluar konkurrencën dhe për të rritur rritjen e biznesit, çdo organizatë duhet të përdorë shërbimet e Optimizimit të Motorit të Kërkimit. Markat e mëdha mund të investojnë para të mjaftueshme për shërbimin ekspert SEO të ofruar nga një kompani e mirë SEO ose një specialist SEO, por pronarët e bizneseve të vogla shpesh bëjnë kompromise për cilësinë e këtij shërbimi për shkak të buxhetit më të vogël. Është një fakt i vështirë që biznesi i vogël dhe startup-et përfundojnë duke lënë mundësitë që mund të krijohen me shërbimin profesional SEO ose përdorin një shërbim të lirë SEO që nuk jep rezultate pozitive.
Pronarët e bizneseve të vogla dhe startup-et mund të përfitojnë nga shërbimet profesionale SEO edhe në buxhetin e kufizuar. Zgjidhja më e mirë është gjetja e një kompanie të besueshme SEO me bazë jashtë Indisë. Në Indi, ka shumë ekspertë të SEO që punojnë me agjencinë e marketingut dixhital dhe ofrojnë shërbimet më të mira në industri. Ata mund t'ju ofrojnë shërbimet e kërkuara SEO në buxhetin tuaj. Pagat mund të negociohen me një agjenci SEO në Indi për të marrë shërbime më të mira me tarifa më të ulëta. Sidoqoftë, mos bini në shërbim të lirë SEO që kushton më pak dhe premtoni të jepni më shumë pasi ekspertiza vjen me koston e saj. Ju duhet të shihni portofolin ose të bëni pyetjet e duhura përpara se të kontraktoni një kompani për biznesin tuaj.
Ekspertët e SEO në Indi janë të aftë me praktikat më të mira të optimizimit të motorëve të kërkimit. Gjithashtu, ka disa specialistë të SEO në Indi si Ash Vyas, të cilët specializohen në krijimin e strategjisë më të mirë të optimizimit të motorit të kërkimit për një biznes me buxhetin e deklaruar. Profesionistët e SEO do të krijojnë një plan të qartë dhe gjithashtu do të ndajnë se cilat mund të jenë rezultatet e pritura. Në këtë mënyrë ju mund të jeni të vetëdijshëm për investimet dhe kthimet tuaja. Kjo ndihmon në marrjen e një vendimi më të mirë biznesi.
Një ide e mirë është të gjeni dhe kontraktoni një kompani SEO të besueshme nga India që ofron shërbimet më të mira të SEO sa më shpejt të jetë e mundur. Ju gjithashtu mund të filloni me një buxhet të vogël dhe aktivitete të kufizuara për të filluar indeksimin e Uebfaqeve tuaja dhe rritjen e fjalëve kyçe në motorët e kërkimit. Mos prisni për perfekte koha ose një ditë kur do të keni mijëra dollarë për të investuar në shërbimet më të mira të SEO. Fillimi herët do t'ju ndihmojë të merrni rezultate më të shpejta kur mund të jeni agresiv me qasjen tuaj të marketingut. Një kompani e besueshme SEO e bazuar në Indi do t'ju ndihmojë të përcaktoni planet tuaja aktuale dhe të ardhshme për të dhënë rezultate të mira. Më shumë faqe të indeksuara rritën renditjen dhe markën e besueshme të biznesit tuaj të bëra me praktika të vazhdueshme profesionale SEO do të dyfishojnë kërkesat, biznesin dhe të ardhurat. Çdo biznes i vogël mund të fillojë me investime dyshifrore në shërbimet profesionale SEO. Ka shumë agjenci SEO në Indi që ofrojnë buxhet të ulët, por rezultojnë nga shërbimet e orientuara të Optimizimit të Motorit të Kërkimit.

sondazhe nga mërgimi

  • CraigWew

    12.04.2018

    p»їRëndësia e krijimit të raportit me klientin në pasuritë e paluajtshme dhe shitjet e përgjithshme

    Rëndësia e krijimit të raportit me klientin.
    Krijimi i raportit me një klient duhet të fitohet dhe duhet trajtuar si një pjesë shumë integrale e procesit të shitjes.
    Për të bërë një klient dhe veten të lidhen në një bazë reale një me një, përfshin dy gjëra!
    Së pari, do të duhet të jeni të vetëdijshëm dhe të jeni aty! Së dyti, duhet të kuptoni se ka dy faza të ndryshme që do të ndodhin gjatë këtij procesi.
    A-Bëhu aty-çfarë do të thotë kjo?
    o Shumica e njerëzve nuk e dëgjojnë me të vërtetë një person tjetër ndërsa ata flasin. Në përgjithësi ata janë aq të zënë me formulimin e përgjigjes ose deklaratës së tyre të radhës, saqë nuk mund ta dëgjonin vërtet.
    o Nëse kjo tingëllon si ju, të jeni atje do të thotë të heshtni dhe të dëgjoni!
    B-Cila është faza e parë apo fillestare?
    o Në përgjithësi ju keni vetëm disa minuta për të vendosur veten në mendjen e klientëve si dikush me të cilin duan të merren.
    o Kur dyshoni, është më mirë që fillimisht të bëni pyetje që do t'i tërheqin ata dhe do të flasin për veten e tyre.
    o Është gjithashtu gjithmonë e sigurt të paraqitesh si profesionist - nuk dua të them stoik apo të thatë, por dikush që e di se çfarë po bëjnë dhe flet dhe shikon pjesën.
    C-Faza të tjera
    o Me kalimin e kohës, përmes bisedave dhe pyetjeve që ata do të kenë, ju ose do të përcaktoni aftësinë tuaj ose jo.
    o Jini të vetëdijshëm se ata ndoshta do t'ju matin për një kohë. Lajmi i mirë është se në një moment, nëse keni qenë të suksesshëm në krijimin e marrëdhënieve - ata do të qetësohen dhe të dy mund të përqendroheni në gjetjen ose shitjen e shtëpisë.
    Çfarë tjetër mund të më ndihmojë të zhvilloj raportin?
    o Duke u përpjekur të kuptoni lloje të ndryshme personaliteti dhe më pas duke thënë dhe bërë pyetjet e duhura.
    o Nëse keni raporte të mira (përfshini të njëjtën gjatësi vale si klienti), atëherë shitja në thelb ka mbaruar, tani është vetëm një çështje për të gjetur shtëpinë e duhur ose për të plotësuar letrat e listimit.
    Po për personalitete të ndryshme
    o Meqenëse ky nuk është një libër mbi psikiatrinë, tani për tani vetëm kuptoni dy lloje kryesore.
    o Ka njerëz introvertë dhe ekstrovertë.
    o Ti e di llojin. Mendoni për tre persona që njihni që i përshtaten secilit klasifikim.
    Po në lidhje me gjuhën e trupit dhe modelet e të folurit?
    o Nëse flasin shpejt ose ngadalë, përpiquni të imitoni modelet e tyre të të folurit.
    o Nëse flasin me zë ose të butë, bëni të njëjtën gjë. A janë ata të përkulur përpara apo prapa?
    o Është e panevojshme të thuhet se ka shumë libra të shkruar mbi këtë temë. Vetëm kini parasysh se është një faktor i rëndësishëm - veçanërisht kur jeni ulur në një sallë konferencash ose në shtëpinë e dikujt duke diskutuar një marrëveshje prej 400,000 dollarësh.
    Zhvillimi i raportit është një aftësi që mund të mësohet dhe të përmirësohet.
    o Të gjithë kemi përjetuar një shitës që na ka shitur diçka dhe megjithatë ne nuk e kemi ndjerë sikur po shisnim. Arsyeja është se ai ose ajo, ju ka bërë të ndiheni rehat aty ku i keni besuar.
    Si ta zhvillojmë raportin?
    o Përdorni sytë dhe veshët dhe bëni pyetje. Për të shpjeguar
    o Përdorni sytë:
    o Shikoni veshjen e tyre-makinën e tyre-pronat e tyre personale dhe dua të them vërtet shikoni ato dhe deshifroni se çfarë ju thotë kjo për ta.
    o Përdorni veshët:
    o Dëgjoni atë që thonë ata dhe bëni pyetje për të arritur në fund të MOTIVIMIT të tyre të vërtetë!
    Tani gjatë gjithë kësaj bisede, ndoshta do të ketë një ose dy gjëra që do të zbuloni se keni të përbashkëta me ta. (Familja, zonat gjeografike, peshkimi, etj.) Kur hasni në pika të përbashkëta, tregojuni atyre që jeni familjar dhe më pas merrni një minutë për ta diskutuar atë me ta.
    Cili është Qëllimi?
    o Pasi të të pranojnë si një prej tyre, do të jesh në gjendje të kesh vërtet një përvojë të madhe në shitje pasi tani po punoni së bashku më pas si ekip—nuk jeni më shitësi që jeni tani në një pozicion këshillues .
    o Mos harroni, klienti ose do ose nuk do t'ju lejojë të hyni në botën e tij. Nëse e kuptoni këtë dhe punoni shumë për t'u bërë empatik me të, mund të fitoni një pozicion besimi. Në shumicën e rasteve, ju në të vërtetë do t'i shihni ata të pushojnë (gjuhën e trupit) kur kjo ndodh që jeni rrugës.
    o Për ta ilustruar këtë, a keni mbajtur ndonjëherë një fjalim dhe keni vënë re se ndërsa më në fund lidheni me një anëtar të audiencës, ata do të tundin me kokë në shenjë miratimi. Këto gjëra mund të duken të gjitha të rëndomta, por nuk janë.
    Në mbyllje, nëse mund të fitoni besimin e klientëve, shitja e një produkti ose shërbimi është shumë më e lehtë dhe përvoja mund të jetë e këndshme për të gjithë të përfshirë.
    Gjithmonë mbani mend se një Win/Win është situata më e mirë.

Po përpiqem të krahasoj një grup karakteresh me një varg si ky:

Const char *var1 = " "; var1 = getenv("myEnvVar"); if(var1 == "dev") ( // bëj gjëra )

Kjo nëse deklarata nuk testohet kurrë e vërtetë... kur dal var1 është "dev", mendova se ndoshta ka të bëjë me vargun e përfunduar null por strlen "dev" dhe var1 janë të barabarta... Mendova gjithashtu se ndoshta var1 = = "dev" po krahasonte "dev" me adresën e kujtesës së var1 në vend të vlerës. *var1 == "dev" rezulton në një gabim.... provova shumë gjëra, ndoshta një zgjidhje e thjeshtë për një zhvillues të zgjuar të C++ (nuk e kam koduar C++ për një kohë të gjatë).

redakto: ne u përpoqëm

Nëse(strcmp(var1, "dev") == 0)

If(strncmp(var1, "dev", 3) == 0)

redakto: Pas testimit në shtëpi, unë thjesht sugjeroj që kolegu im të ndryshojë llojin e të dhënave në string. Unë besoj se ai po krahasonte një grup char me madhësi të madhe me një varg. Unë kam bashkuar një program që printon sizeof, strlen, etj. për të na ndihmuar me këtë. Faleminderit të gjithëve për ndihmën tuaj.

6 përgjigje

Ju nuk jeni duke punuar me vargje. Ju jeni duke punuar me tregues. var1 është një tregues char (const char*). Ky nuk është një varg. Nëse përfundon me null, disa funksione C do ta trajtojnë atë si një varg, por në thelb është vetëm një tregues.

Pra, kur e krahasoni atë me një grup char, grupi ndahet në një tregues dhe më pas përpiluesi përpiqet të gjejë operatorin == (const char*, const char*) .

Një operator i tillë ekziston. Ai pranon dy tregues dhe kthen true nëse tregojnë në të njëjtën adresë. Pra, përpiluesi e quan këtë dhe kodi juaj prishet.

NËSE doni të bëni krahasime të vargjeve, duhet t'i tregoni përpiluesit se dëshironi të merreni me vargje, jo me tregues.

Për ta bërë këtë, duhet të përdorni funksionin strcmp:

Strcmp(var1, "dev");

Kjo kthen null nëse dy vargje janë të barabarta. (Do të kthejë një vlerë më të madhe se zero nëse ana e majtë është leksikografikisht më e madhe se ana e djathtë dhe një vlerë më e vogël se zero ndryshe.)

Pra, për të krahasuar për barazi, duhet të bëni një nga sa vijon:

Nëse (!strcmp(var1, "dev"))(...) if (strcmp(var1, "dev") == 0) (...)

Megjithatë, C++ ka një klasë string shumë të dobishme. Nëse e përdorim këtë kodi juaj do të bëhet më i thjeshtë. Sigurisht, ne mund të krijojmë vargje nga të dy argumentet, por duhet ta bëjmë këtë vetëm me njërin prej tyre:

Std::string var1 = getenv("myEnvVar"); if(var1 == "dev") ( // bëj gjëra )

Përpiluesi tani ndeshet me një krahasim midis një vargu dhe një treguesi char. Ai mund ta trajtojë këtë sepse një tregues char mund të konvertohet në mënyrë implicite në një varg, duke dhënë një krahasim varg-me-string. Dhe ata sillen pikërisht ashtu siç do të prisnit.

Në këtë kod nuk po krahasoni vlerat e vargut, po krahasoni vlerat e treguesit. Nëse dëshironi të krahasoni vlerat e vargut, duhet të përdorni një funksion krahasimi të vargjeve si strcmp.

Nëse (0 == strcmp(var1, "dev")) ( .. )

"dev" nuk është një varg, është një char const * si var1. Në këtë mënyrë ju po krahasoni adresat e kujtesës. Duke qenë se var1 është një shenjë treguese, *var1 është një shenjë e vetme (më saktë, karakteri i parë i sekuencës së karaktereve të specifikuara). Ju nuk mund të krahasoni char me një tregues char, kështu që nuk funksionoi dhe shtoni një deklaratë në kokë

// Parametrat përdorin "const" për të parandaluar prishjen e mundshme të objektit. bool string_equal (const char* arg0, const char* arg1);

Për ta përdorur, thjesht vendosni thirrjen te "string_equal" si kusht i një deklarate/blloku if (ose tresh).

Nëse (string_equal (var1, "dev")) ( // Është e barabartë, bëni atë që nevojitet këtu. ) tjetër ( // Nuk është e barabartë, bëni atë që nevojitet këtu (opsionale). )

34

--- Udhëzues C# --- Strings

Nga pikëpamja e rregullt e programimit, 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 thjeshtë për të ndërtuar një varg karakteresh është përdorimi i një vargu literal. Për shembull, rreshti i mëposhtëm i kodit i cakton variablit të referencës së vargut str një referencë për një varg literal:

String str = "Starg Shembull";

Në këtë rast, ndryshorja str inicializohet me sekuencën e karaktereve "Sembulli i vargut". Një objekt i tipit string mund të krijohet gjithashtu 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 vargu, ai mund të përdoret kudo që ju nevojitet një varg teksti i mbyllur në thonjëza.

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ë jetë krijuar një sekuencë karakteresh, ajo nuk mund të ndryshohet. Por ky kufizim kontribuon në një zbatim më efikas të vargjeve të karaktereve. Prandaj, ky disavantazh në dukje i dukshëm kthehet në të vërtetë në një avantazh. Kështu, 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 vargut të papërdorur mblidhen automatikisht si mbeturina, fati i ardhshëm Nuk duhet të shqetësoheni as për linjat e panevojshme.

Megjithatë, duhet theksuar se referencat e variablave për vargjet (d.m.th., objektet e tipit string) janë subjekt i ndryshimit 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 pasi të krijohet.

Le të shohim 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 shumë thirrje në kodin optik ldstr (ngarkesa e vargut). Ky kod optik CIL ldstr kryen ngarkimin e një objekti të ri të vargut 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 Strings

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

Fusha, Indeksuesi dhe Vetia e Klasës së Vargut

Klasa String përcakton një fushë të vetme:

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

Fusha Empty tregon një varg bosh, d.m.th. një varg që nuk përmban asnjë karakter. Kjo është e ndryshme nga një referencë boshe e vargut, e cila thjesht i bëhet një objekti joekzistent.

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

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

Ky indeksues ju lejon të merrni një karakter në një indeks të caktuar. Indeksimi i vargjeve, si vargjet, fillon nga zero. Objektet e vargut janë të qëndrueshëm dhe nuk ndryshojnë, 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ë varg. Shembulli i mëposhtëm tregon përdorimin e indeksuesit dhe vetisë Length:

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

Operatorët e klasës së vargjeve

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 teston nëse të dyja referencat i bëhen të njëjtit objekt. Dhe kur operatori == zbatohet për referencat e objekteve të tipit String, përmbajtja e vargjeve në vetvete krahasohet për barazi. E njëjta gjë vlen edhe për operatorin !=. Kur zbatohet për referencat ndaj objekteve të tipit String, përmbajtja e vargjeve në vetvete krahasohet për pabarazi. Megjithatë, operatorë të tjerë relacionalë, duke përfshirë =, krahasojnë referencat me objektet e tipit String në të njëjtën mënyrë siç krahasojnë referencat me objekte të llojeve të tjera. Dhe për të kontrolluar nëse një varg është më i madh se tjetri, duhet të thërrisni metodën Compare() të përcaktuar në klasën String.

Siç do të bëhet e qartë, shumë lloje të krahasimeve të vargjeve të karaktereve mbështeten në informacionin 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 nga normat kulturore, domethënë standardet lokale.) Prandaj, këta operatorë kryejnë krahasime të vargjeve në një mënyrë të pandjeshme ndaj shkronjave dhe kulturës.

Metodat e klasës së vargut

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

Metodat për të punuar me vargje
Metoda Struktura dhe mbingarkesat Qëllimi
Krahasimi i vargjeve
krahaso () int statike publike Krahaso (strA string, string strB)

Int statike publike Krahaso (strA string, string strB, bool ignoreCase)

Krahasimi statik publik (strA string, string strB, string Krahasimi tipi)

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; negative nëse strA është më e vogël se strB; dhe zero nëse vargjet strA dhe strB janë të barabarta. Krahasimet bëhen në bazë të regjistrit dhe kulturës.

Nëse ignoreCase vlerësohet si true, krahasimi nuk merr parasysh dallimet midis shkronjave të mëdha dhe të vogla. Përndryshe, këto dallime merren parasysh.

Parametri ComparationType specifikon mënyrën specifike të krahasimit të vargjeve. Klasa CultureInfo përcaktohet në hapësirën e emrave System.Globalization.

int statike publike Krahaso (strA strA, int indexA, string strB, int indexB, int length)

Int statike publike Krahaso (strA strA, int indexA, string strB, int indexB, int length, bool ignoreCase)

Krahasimi publik statik int (strA string, int indexA, string strB, int indexB, int length, StringComparison Type Comparison)

Int statike publike Krahasoni (strA strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo Culture)

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 një pjesë e vargut strA është më e madhe se një pjesë 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 vargjeve strA dhe strB që krahasohen janë të barabarta. Krahasimet bëhen në bazë të regjistrit dhe kulturës.

KrahasoOrdinal() publik statik int KrahasimiOrdinal(strA strA, vargu strB)

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

Bën të njëjtën gjë si metoda Compare(), por pa marrë parasysh 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; negative nëse vargu thirrës është më i vogël se vlera; dhe zero nëse vargjet e krahasuara janë të barabarta

publike int CompareTo (string strB)

Krahason vargun thirrës me vargun strB

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

E kthen të vërtetën boolean nëse vargu thirrës përmban të njëjtën sekuencë karakteresh si paraqitja e vargut të obj. Kryen një krahasim rendor që është i ndjeshëm ndaj rasteve, por i pandjeshëm nga ana kulturore

bool publik E barabartë (vlera e vargut)

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

E kthen vlerën boolean të vërtetë nëse vargu thirrës përmban të njëjtën sekuencë karakteresh si vlera e vargut. Bëhet një krahasim rendor që është i ndjeshëm, por jo i ndjeshëm nga ana kulturore. Parametri ComparationType specifikon mënyrën specifike të krahasimit të vargjeve

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 që është i ndjeshëm, por jo i ndjeshëm nga ana kulturore. Parametri ComparationType specifikon mënyrën specifike të krahasimit të vargjeve

Lidhje (bashkim) e vargjeve
Concat () string publik statik Concat (string str0, string str1);

string publik statik Concat (params vlerat e vargut);

Kombinon instancat individuale të vargut në një varg të vetëm (lidhje)
Kërkoni në një 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ë caktuar
FillonMe() bool publik 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 mënyrën specifike të kryerjes së kërkimit

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

Publik bool 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, kthen vlerën boolean false. Parametri ComparationType specifikon metodën specifike të kërkimit

Indeksi i() int publik IndexOf (vlera e karakterit)

IndexOf publik (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 kërkuar nuk gjendet, atëherë vlera -1 kthehet.

int int publik IndexOf (vlera char, int startIndex)

Int publik IndexOf (vlera e vargut, int startIndex)

Indeksi publik int (vlera e shkronjave, indeksi int start, numërimi int)

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 në elementin e specifikuar nga startIndex dhe përfshin numrin e elementeve të specifikuar nga numërimi (nëse specifikohet). Metoda kthen -1 nëse karakteri ose nënvargu i kërkuar nuk gjendet

LastIndexOf() 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 nga grupi anyOf që gjendet në vargun thirrës. Kërkimi fillon në elementin e specifikuar nga startIndex dhe përfshin numrin e elementeve të specifikuar nga numërimi (nëse specifikohet). Metoda kthen -1 nëse asnjë karakter në grupin anyOf nuk përputhet. Kontrolli kryhet në mënyrë rendore

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 (params ndarës i karaktereve)

Ndarja e vargut publik (paramon ndarësin e karaktereve, numërimin int)

Një metodë që kthen një varg vargje me nënvargjet e pranishme në këtë rast brenda, të cilat janë të ndara nga njëri-tjetri nga elementë nga char ose vargu i specifikuar i vargut.

Forma e parë e metodës Split() ndan vargun thirrës në pjesët përbërëse të tij. Rezultati është 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 vargut 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ënstrings të përcaktuar nga parametri count.

Ndarja e vargut publik (paramon ndarësin e karaktereve, opsionet e StringSplitOptions)

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

Ndarja e vargut publik (paramon ndarësin e karaktereve, numërimin 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 të kufizuar nga parametri i numërimit.

Por në të gjitha format, parametri i opsioneve specifikon një mënyrë specifike për të trajtuar linjat boshe që prodhohen kur dy kufizues janë ngjitur. Numërimi i StringSplitOptions përcakton vetëm dy vlera: Asnje Dhe RemoveEmptyEntries. Nëse opsionet janë Asnjë, atëherë 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ë linjat boshe përjashtohen nga rezultati përfundimtar i ndarjes së vargut origjinal.

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

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

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ënvargje të lidhura të kaluara në grupin e vlerave. Forma e dytë kthen gjithashtu një varg të përbërë nga nënvargjet e kaluara në vargun e vlerave, por ato janë të lidhura në një numër të caktuar numrash, duke filluar me elementin e vargut të vlerave. Në të dyja format, çdo rresht pasues ndahet nga rreshti i mëparshëm nga një linjë ndarëse e specifikuar nga parametri ndarës.

Linjat e mbushjes dhe shkurtimit
Shkurtim () string publik Trim()

Prerja e vargut publik (params char trimChars)

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

Forma e parë e metodës Trim() heq hapësirat kryesore dhe pasuese nga vargu thirrës. Dhe forma e dytë e kësaj metode heq dukuritë kryesore dhe pasuese të vargut të karaktereve thirrëse nga grupi trimChars. Të dy format kthejnë vargun që rezulton.

PadLeft () varg publik PadLeft (int totalWidth)

Vargu publik PadLeft (int totalWidth, char paddingChar)

Ju lejon të plotësoni një varg me karaktere në të majtë.

Forma e parë e metodës PadLeft() prezanton hapësira në anën e majtë të vargut thirrës në mënyrë që gjatësia totale e tij të bëhet e barabartë me vlerën Parametri totalWidth. Dhe në formën e dytë të kësaj metode, karakteret e shënuara me parametrin paddingChar futen në anën e majtë të vargut thirrës në mënyrë që gjatësia totale e tij të bëhet e barabartë me vlerën e parametrit totalWidth. Të dy format kthejnë vargun që rezulton. Nëse vlera e parametrit totalWidth është më e vogël se gjatësia e vargut thirrës, atëherë kthehet një kopje e vargut thirrës të pandryshuar.

PadRight () Njëlloj si PadLeft ()

Ju lejon të shtoni një varg me karaktere në të djathtë.

Futja, fshirja dhe zëvendësimi i rreshtave
Fut () Fut vargun publik (indeksi i fillimit int, vlera e vargut)

Përdoret për të futur një rresht në një tjetër, ku vlera tregon rreshtin që do të futet në rreshtin thirrës në 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 fillon në vendndodhjen e treguar nga startIndex dhe vazhdon deri në fund të rreshtit. Dhe në formën e dytë të kësaj metode, numri i karaktereve të përcaktuara nga parametri count hiqet nga vargu, duke filluar nga vendi i treguar nga indeksi startIndex.

Zëvendëso () vargu publik Zëvendëso (char vjetërChar, char newChar)

Vargu publik Replace (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 karakterit oldChar në vargun thirrës zëvendësohen me karakterin newChar. Dhe në formën e dytë të kësaj metode, të gjitha shfaqjet e vargut oldValue në linjën thirrëse zëvendësohen me vargun newValue.

Ndrysho rastin
Sipërm() vargu publik ToUpper()

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

ToLower () vargu publik ToLower()

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

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

Vargu publik Nënvarg (indeksi int start, gjatësia int)

Në formën e parë të metodës Substring(), një nënvarg merret duke filluar nga vendndodhja e treguar nga parametri startIndex deri në fund të vargut thirrës. Dhe në formën e dytë të kësaj metode, nxirret një nënvarg i përbërë nga numri i karaktereve të përcaktuar nga parametri i gjatësisë, duke filluar nga vendi i treguar nga parametri startIndex.

Programi i mëposhtëm shembull 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 ( class Program ( static void Main(string args) ( // Krahaso dy rreshtat e parë string s1 = "ky është një varg"; string 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" if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine); ("Megjithatë, ato përmbajnë të njëjtin tekst" // Lidhja e vargjeve Console.WriteLine(String.Concat("\n" + "Një, dy ","tre, katër")); / Shfaqja e parë e një nënvargu if (s2. IndexOf("this") != -1) Console.WriteLine("Fjala \"this\" gjendet në rresht, është "+ "ndodhet në: (0) pozicion", s2.IndexOf("this")); / Ndodhja e fundit e nënvargut if (s2.LastIndexOf("this") != -1) Console.WriteLine("Ndodhja e fundit e fjalës \"this\" ë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 "+ "gjendet në rreshtin aktual në pozicionin (0)", s2.IndexOfAny(myCh)); // Përcaktoni nëse rreshti fillon me nënvargun e dhënë nëse (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 është Windows 7"); Console.ReadLine(); ) ))

Pak për krahasimin e vargjeve në C#

Ndoshta më i zakonshmi nga të gjitha operacionet e vargut të karaktereve është krahasimi i një vargu me tjetrin. Para se të shikojmë ndonjë metodë të krahasimit të vargjeve, ia vlen të theksojmë sa vijon: Krahasimet e vargjeve mund të bëhen 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ë lojë kur programi zbatohet. 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 kulturore vetëm nga vlerat rendore të personazheve që përbëjnë vargun. Në përgjithësi, kur krahasohen vargjet pa marrë parasysh mjedisin kulturor, përdoret rendi leksikografik (dhe veçoritë 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ë krahasimin rendor, vargjet thjesht renditen bazuar në vlerën e pandryshuar të çdo karakteri.

Për shkak të dallimeve në mënyrën se si ndryshojnë krahasimet e vargjeve kulturore dhe krahasimet rendore, dhe pasojat e secilit krahasim të tillë, ju rekomandojmë fuqimisht që të ndiqni praktikat më të mira të ofruara aktualisht nga Microsoft. Në fund të fundit, zgjedhja e metodës së gabuar për krahasimin e vargjeve mund të çojë në funksionim të gabuar të programit kur ai operohet në një mjedis të ndryshëm 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, duhet të zgjidhni të krahasoni vargjet në një mënyrë të ndjeshme kulturore nëse kjo bëhet për qëllimin e shfaqjes së rezultatit tek përdoruesi (për shembull, për të shfaqur një seri vargjesh të renditura sipas rendit leksikografik). Por nëse vargjet përmbajnë informacione fikse që nuk synohen të modifikohen për dallimet kulturore, të tilla si një emër skedari, fjalë kyçe, adresë uebsajti ose vlerë sigurie, atëherë duhet të zgjidhni krahasimin rendor të vargjeve. Natyrisht, karakteristikat e aplikacionit të veçantë që po zhvillohet do të diktojnë zgjedhjen e një metode të përshtatshme për krahasimin e vargjeve të 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ë universalja prej tyre është metoda Compare(). Ai lejon që dy vargje të krahasohen tërësisht ose pjesërisht, të ndjeshme ndaj shkronjave të vogla ose të pakta, në një mënyrë të përcaktuar nga parametri i tipit Krahasimi i vargjeve, si dhe informacionin kulturor të dhënë nga parametri tip CultureInfo.

Ato mbingarkesa të metodës Compare() që nuk përfshijnë një parametër të tipit StringComparison kryejnë një krahasim të ndjeshëm ndaj rasteve dhe kulturës të vargjeve të karaktereve. Dhe në ato variante të mbingarkuar që nuk përmbajnë një parametër të llojit CultureInfo, informacioni rreth mjedisit kulturor përcaktohet nga mjedisi aktual i kohës së ekzekutimit.

Lloji StringComparison është një numërim që përcakton vlerat e paraqitura në tabelën më poshtë. Duke përdorur këto vlera, mund të krijoni krahasime të vargjeve që i përshtaten nevojave të aplikacionit tuaj specifik. Prandaj, shtimi i një parametri të tipit StringComparison zgjeron aftësitë e metodës Compare() dhe metodave të tjera të krahasimit si Equals(). Kjo gjithashtu bën të mundur që të tregohet pa mëdyshje se si synohet të krahasohen vargjet.

Për shkak të dallimeve midis krahasimeve të vargjeve të ndjeshme nga ana kulturore dhe krahasimeve rendore, është 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ë mjedisit kulturor
CurrentCultureIgnoreCase Krahasimet e vargjeve bëhen duke përdorur cilësimet aktuale të kulturës, por nuk janë të ndjeshme ndaj shkronjave të vogla
Kulturë e pandryshueshme Krahasimet e vargjeve bëhen duke përdorur ato të pandryshueshme, d.m.th. të dhëna universale për mjedisin kulturor
InvariantCultureIgnoreCase Krahasimet e vargjeve bëhen duke përdorur ato të pandryshueshme, d.m.th. të dhëna kulturore universale dhe të pandjeshme ndaj rasteve
rendore Krahasimet e vargjeve bëhen duke përdorur vlerat rendore të karaktereve në varg. Në këtë rast, rendi leksikografik mund të prishet dhe simbolet të pranuara në një mjedis të caktuar kulturor injorohen
OrdinalIgnoreCase Krahasimet e vargjeve bëhen duke përdorur vlerat rendore të karaktereve në varg, por nuk janë të ndjeshme ndaj shkronjave të vogla.

Në çdo rast, metoda Compare() kthen një vlerë negative nëse vargu i parë i krahasuar është më i vogël se i dyti; pozitiv nëse vargu i parë i krahasuar është më i madh se i dyti; dhe së fundi, 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.

Fakti është se metoda Compare() përcakton barazinë e vargjeve të krahasuara bazuar në renditjen e tyre. Kështu, nëse bëhet një krahasim kulturor midis vargjeve, të dy vargjet mund të jenë të njëjta në renditjen e tyre, por jo të barabarta në thelb. Si parazgjedhje, barazia e vargut përcaktohet në metodën Equals(), bazuar në vlerat rendore të personazheve dhe pa marrë parasysh mjedisin kulturor. Prandaj, si parazgjedhje, të dy vargjet krahasohen në këtë metodë për barazi absolute, karakter pas karakteri, ngjashëm me mënyrën se si bëhet në operatorin ==.

Pavarësisht nga shkathtësia e madhe e metodës Compare(), për krahasime të thjeshta rendore të vargjeve të karaktereve është më e lehtë të përdoret metoda CompareOrdinal(). Së fundi, mbani në mend se metoda CompareTo() kryen vetëm krahasime të vargjeve të ndjeshme kulturore.

Programi i mëposhtëm demonstron përdorimin e metodave Compare(), Equals(), CompareOrdinal() dhe operatorët == dhe != për të krahasuar vargjet e karaktereve. Vini re se dy shembujt e parë të krahasimit tregojnë qartë ndryshimet midis krahasimeve të vargjeve të ndjeshme kulturore dhe krahasimeve rendore në një mjedis anglishtfolës:

Përdorimi i Sistemit; Klasa Shembull ( static void Main() ( string str1 = "alfa"; string str2 = "Alfa"; string str3 = "Beta"; string str4 = "alfa"; string str5 = "alfa, beta"; int rezultat; / / Së pari, demonstroni dallimet ndërmjet krahasimit të vargjeve të ndjeshme ndaj kulturës // dhe rezultatit të krahasimit rendor = String.Compare(str1, str2, StringComparison.CurrentCulture.Write("Krahasimi i vargjeve të ndjeshme ndaj kulturës: " ) Console.WriteLine (str1 + "më e madhe se " + str2. WriteLine (str1 + "e barabartë me " + str2 rezultat = String ) Console.WriteLine(str1 + "më e madhe se " + str2.WriteLine(str1 + "e barabartë me " + str4); .Write("Krahasimi i vargjeve duke përdorur CompareOrdinal():\n" if (rezultati 0) Console.WriteLine(str1 + "më e madhe se " + str2 else Console.WriteLine(str1 + "e barabartë me " + 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 linjës 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 të pandjeshme 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 + " barabartë me " + str2); Console.WriteLine(); // Krahaso pjesët e vargjeve if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Krahaso vargjet duke marrë parasysh mjedisin aktual kulturor:" + "\n3 karakteret e para të vargut " + str2 + " më shumë se 3 karakteret e para të rreshtit " + str5); ) ))

Ekzekutimi i këtij programi prodhon daljen e mëposhtme:



Ju pëlqeu artikulli? Ndani me miqtë tuaj!