Funktsioonid stringide töötlemiseks C-s. Funktsioonid stringide töötlemiseks C-s Standardteegi põhifunktsioonid string.h

Programmis saab stringe määratleda järgmiselt:

  • stringikonstantidena;
  • märgimassiividena;
  • kursori kaudu märgitüübile;
  • nagu stringide massiivid.

Lisaks tuleb stringi salvestamiseks ette näha mälu eraldamine.

Jutumärkides "" olevat märgijada käsitletakse kui stringi konstant.

Õigeks väljundiks peab iga string lõppema nullmärgiga "\0", mille täisarvu väärtus on 0. Stringikonstandi deklareerimisel lisatakse sellele automaatselt nullmärk. Seega paigutatakse arvuti RAM-i märgijada, mis on stringi konstant, sealhulgas nullbait.

Stringi salvestamiseks eraldatakse järjestikused RAM-i rakud. Seega on string märkide massiiv. Iga tähemärgi koodi salvestamiseks stringis on eraldatud 1 bait.

Mõne teenusemärgi paigutamiseks stringikonstandisse kasutatakse märgikombinatsioone. Seega, kui peate stringi lisama topeltjutumärgi, peab sellele eelnema kaldkriips: „\”’ .

Stringi konstandid asuvad staatilises mälus. Jutumärkides olevate tähemärkide jada algusaadressi käsitletakse stringi aadressina. Stringikonstante kasutatakse sageli kasutaja interaktsiooni tagamiseks sellistes funktsioonides nagu printf().

Määramisel tähemärkide massiiv peate kompilaatorile teatama vajaliku mälumahu.

söe m;

Kompilaator saab ka iseseisvalt määrata märgimassiivi suuruse, kui massiivi lähtestamine on määratud selle stringikonstandiks deklareerimisel:

süsi m2=;
char m3=( "T", "i", "x", "i", "e", ", "d", "o", "l", "i", "n", "s", ", "p ", "o", "l", "n", "y", ", "s", "v", "e", "zh", "e", "y", ", "m", "g", "l", "o", "y","\0"};

Sel juhul on nimed m2 ja m3 osutajad massiivi esimestele elementidele:

  • m2 on võrdne &m2-ga
  • m2 on samaväärne 'G'ga
  • m2 on samaväärne 'o'ga
  • m3 on võrdne &m3-ga
  • m3 on samaväärne 'x'ga

Märgimassiivi deklareerimisel ja stringikonstandiga lähtestamisel saate massiivi suuruse selgesõnaliselt määrata, kuid määratud massiivi suurus peab olema suurem kui lähtestava stringi konstandi suurus:

char m2= "Mäetipud magavad ööpimeduses.";

Stringi määramiseks saate kasutada kursor märgi tüübile.

süsi *m4;

Sel juhul saab massiivi deklareerimisel muutujale m4 määrata massiivi aadressi:

m4 = m3;
*m4 võrdub m3="T"
*(m4+1) võrdub m3="ja"

Siin on m3 osuti konstant. Te ei saa m3 muuta, kuna see tähendaks erinevalt m4-st massiivi asukoha (aadressi) muutmist mälus.

Kursori jaoks saate kasutada suurendamistoimingut (liikumine järgmise märgi juurde):

Tähemärgistringide massiivid

Mõnikord vajavad programmid kirjeldust märgistringide massiiv. Sel juhul saate mitmele erinevale reale juurdepääsuks kasutada reaindeksit.

char *luuletaja = ( "Luuletaja suri!", "- au ori -",
"Kukkunud", "kuulujuttu laimatud..."};

Sel juhul on poeet massiiv, mis koosneb neljast märgistringi osutavast viidist. Iga märgistring on märgimassiivi, seega on neli massiivi osutit. Luuletaja osuti viitab esimesele reale:
*luuletaja samaväärne "P",
*luuletaja[l] samaväärne "-" .

Initsialiseerimine toimub vastavalt massiivide jaoks määratletud reeglitele.
Tsiteeritud tekstid on samaväärsed massiivi iga stringi lähtestamisega. Koma eraldab kõrval olevad
järjestused.
Samuti saate märgistringide suuruse selgesõnaliselt määrata, kasutades sellist kirjeldust:

char poeet;

Erinevus seisneb selles, et see vorm määratleb "ristkülikukujulise" massiivi, milles kõik read on sama pikkusega.

Tasuta massiiv

Kirjeldus

char *luuletaja;


defineerib vaba massiivi, kus iga rea ​​pikkuse määrab kursor, mis selle rea lähtestab. Vaba massiiv ei raiska mälu.

Stringoperatsioonid

Enamik C-operatsioone, mis käsitlevad stringe, töötavad osutitega. Tähemärkide jada RAM-i paigutamiseks peate:

  • eraldage massiivi jaoks RAM-i plokk;
  • initsialiseerige string.

Mälu eraldamiseks stringi salvestamiseks saab kasutada dünaamilisi mälujaotuse funktsioone. Sel juhul on vaja arvestada vajaliku rea suurusega:

char *nimi;
nimi = (char *)malloc(10);
scanf("%9s" , nimi);

Stringi sisestamiseks kasutatakse funktsiooni scanf() ja sisestatud string ei tohi ületada 9 tähemärki. Viimane märk sisaldab "\0" .

Stringi sisestusfunktsioonid

Funktsiooni scanf() saab kasutada stringi sisestamiseks. Scanf() on aga mõeldud pigem sõna, mitte stringi hankimiseks. Kui kasutate sisestamiseks vormingut "%s", sisestatakse rida enne järgmist tühja tähemärki (kuid mitte kaasa arvatud), milleks võib olla tühik, tabeldusmärk või reavahetus.

Stringi, sealhulgas tühikute sisestamiseks kasutage funktsiooni

char * gets(char *);


või selle ekvivalent

char * gets_s(char *);

Sisestatava stringi osuti edastatakse funktsiooni argumendina. Funktsioon palub kasutajal sisestada string, mille ta asetab massiivi, kuni kasutaja vajutab Sisestage.

Stringi väljundfunktsioonid

Stringide väljastamiseks võite kasutada eelnevalt käsitletud funktsiooni

printf("%s" , str); // str - osuti stringile

või lühendatud kujul

printf(str);

Funktsiooni saab kasutada ka stringide väljastamiseks

int paneb (char *s);

mis prindib stringi s ja viib kursori uuele reale (erinevalt printf() ). Funktsiooni puts() saab kasutada ka jutumärkides olevate stringikonstantide väljastamiseks.

Märkide sisestusfunktsioon

Funktsiooni saab kasutada märkide sisestamiseks

char getchar();


mis tagastab klaviatuurilt sisestatud märgi väärtuse. Seda funktsiooni kasutati eelnevalt käsitletud näidetes konsooliakna edasilükkamiseks pärast programmi käivitamist kuni klahvi vajutamiseni.

Tähemärgi väljundfunktsioon

Funktsiooni saab kasutada märkide väljastamiseks

char putchar(char);


mis tagastab prinditava märgi väärtuse ja prindib argumendina edastatud märgi ekraanile.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#kaasa
#kaasa
#kaasa
int main() (
char s, süm;
int count, i;
system("chcp 1251");
system("cls" );
printf( "Sisestage string:");
saab_s(id);
printf( "Sisestage märk:");
sym = getchar();
arv = 0;
jaoks (i = 0; s[i] != "\0" ; i++)
{
if (s[i] == süm)
count++;
}
printf("Reas\n" );
paneb(d); // Väljub string
printf("märk");
putchar(süm); // Sümboli väljastamine
printf( "esineb %d korda", loe);
getchar(); getchar();
tagasi 0;
}

Täitmise tulemus

Standardteegi põhifunktsioonid string.h

Standardteegi string.h põhifunktsioonid on toodud tabelis.

Funktsioon Kirjeldus

char * strcat (char * s1, char * s2)

lisab s1-le s2, tagastab s1

char *strncat(char *s1, char *s2, int n)

lisab s1-le kuni n märki s2, lõpetab stringi tähega "\0", tagastab s1

char *strсpy(char *s1, char *s2)

kopeerib stringi s2 stringiks s1, sealhulgas "\0", tagastab s1
);
strncpy(m3, m1, 6); // ei lisa rea ​​lõppu "\0".
paneb( "Tulemus strncpy(m3, m1, 6)");
paneb(m3);
strcpy(m3, m1);
paneb( "Tulemus strcpy(m3, m1)");
paneb(m3);
paneb( "Strcmp(m3, m1) tulemus on");
printf("%d" , strcmp(m3, m1));
strncat(m3, m2, 5);
paneb( "Tulemus strncat(m3, m2, 5)");
paneb(m3);
strcat(m3, m2);
paneb( "Tulemus strcat(m3, m2)");
paneb(m3);
paneb( "Tähemärkide arv stringis m1 on strlen(m1) :");
printf("%d\n" , strlen(m1));
_strnset(m3, "f" , 7);
paneb( "Tulemus strnset(m3, "f" , 7)");
paneb(m3);
_strset(m3, "k" );
paneb( "Result strnset(m3, "k" )");
paneb(m3);
getchar();
tagasi 0;
}

Täitmise tulemus

34

--- C# juhend --- Stringid

Tavalise programmeerimise seisukohast string stringi andmetüüp on C#-s üks olulisemaid. See tüüp määratleb ja toetab märgistringe. Paljudes teistes programmeerimiskeeltes on string märkide massiiv. Ja C#-s on stringid objektid. Seetõttu on stringitüüp viitetüüp.

Stringide ehitamine

Lihtsaim viis märgistringi konstrueerimiseks on kasutada stringi literaali. Näiteks määrab järgmine koodirida stringi viitemuutujale str viite stringliteraalile:

String str = "Näidiste string";

Sel juhul initsialiseeritakse muutuja str märgijadaga "Näidiste string". Stringi tüüpi objekti saab luua ka char tüüpi massiivist. Näiteks:

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

Kui stringobjekt on loodud, saab seda kasutada kõikjal, kus vajate jutumärkides olevat tekstistringi.

Stringi püsivus

Kummalisel kombel ei saa stringi tüüpi objekti sisu muuta. See tähendab, et kui märgijada on loodud, ei saa seda muuta. Kuid see piirang aitab kaasa märgistringide tõhusamale rakendamisele. Seetõttu muutub see näiliselt ilmne puudus tegelikult eeliseks. Seega, kui stringi on vaja olemasoleva stringi variatsioonina, siis selleks tuleks luua uus string, mis sisaldab kõiki vajalikke muudatusi. Ja kuna kasutamata stringiobjektid kogutakse automaatselt prügina, ei pea te isegi mittevajalike stringide saatuse pärast muretsema.

Siiski tuleb rõhutada, et muutujate viited stringidele (st stringi tüüpi objektidele) võivad muutuda ja seetõttu võivad need viidata mõnele teisele objektile. Kuid stringobjekti enda sisu ei muutu pärast selle loomist.

Vaatame näidet:

Staatiline void addNewString() ( string s = "See on minu tõmme"; s = "See on uus tõmme"; )

Kompileerime rakenduse ja laadime saadud koostu ildasm.exe utiliiti. Joonisel on näidatud CIL-kood, mis genereeritakse meetodi void addNewString() jaoks:

Pange tähele, et opkoodile ldstr (laadimisstring) helistatakse palju. See CIL ldstr opkood laadib hallatavasse hunnikusse uue stringiobjekti. Selle tulemusena kogutakse lõpuks prügi ära eelmine objekt, mis sisaldas väärtust "See on minu löök".

Stringidega töötamine

klassis Süsteem.String on ette nähtud meetodite komplekt märgiandmete pikkuse määramiseks, aktiivse stringi alamstringi otsimiseks, märkide teisendamiseks suurtähtedest väiketähtedeks ja vastupidi jne. Järgmisena vaatame seda klassi üksikasjalikumalt.

Välja, indekseerija ja stringiklassi atribuut

Klass String määratleb ühe välja:

Avalik staatiline kirjutuskaitstud string Tühi;

Väli Empty tähistab tühja stringi, st. string, mis ei sisalda märke. See erineb tühjast stringi viitest, mis tehakse lihtsalt olematule objektile.

Lisaks määratleb klass String ühe kirjutuskaitstud indekseerija:

Selle avalik märk ( hankige; )

See indekseerija võimaldab teil saada märgi määratud indeksiga. Stringide, nagu massiivide, indekseerimine algab nullist. Stringiobjektid on püsivad ega muutu, seega on mõistlik, et klass String toetab kirjutuskaitstud indekseerijat.

Lõpuks määratleb klass String ühe kirjutuskaitstud atribuudi:

Avalik int Pikkus ( saada; )

Atribuut Length tagastab stringi märkide arvu. Allolev näide näitab indekseerija ja atribuudi Length kasutamist:

Süsteemi kasutamine; class Näide ( static void Main() ( string str = "Lihtne string"; // Hangi stringi pikkus ja rea ​​kuues märk, kasutades indekseerijat Console.WriteLine("Stringi pikkus - (0), 6. märk - "(1)"" , str.Length, str);

Stringiklassi operaatorid

Klass String koormab üle kahte järgmist operaatorit: == ja !=. Operaatorit == kasutatakse kahe märgistringi võrdsuse testimiseks. Kui objektiviidetele rakendatakse operaatorit ==, testib see tavaliselt, kas mõlemad viited on tehtud samale objektile. Ja kui operaatorit == rakendatakse viidetele tüüpi String objektidele, võrreldakse stringide endi sisu võrdsuse tagamiseks. Sama kehtib ka operaatori != kohta. Kui seda rakendatakse viidetele tüüpi String objektidele, võrreldakse stringide endi sisu ebavõrdsuse suhtes. Teised relatsioonioperaatorid, sealhulgas =, võrdlevad aga viiteid String-tüüpi objektidele samamoodi nagu viiteid muud tüüpi objektidele. Ja selleks, et kontrollida, kas üks string on teisest suurem, peaksite kutsuma String klassis määratletud meetodi Compare().

Nagu selgub, tuginevad mitut tüüpi märgistringide võrdlused kultuuriteabele. Kuid see ei kehti == ja != operaatorite kohta. Lõppude lõpuks võrdlevad nad lihtsalt märkide järguväärtusi stringides. (Teisisõnu võrdlevad nad märkide binaarväärtusi, mida ei ole kultuurinormide, st lokaadistandardite poolt muudetud.) Seetõttu teostavad need operaatorid stringide võrdlusi tõstu- ja kultuuritundlikult.

Stringiklassi meetodid

Järgmises tabelis on loetletud mõned selle klassi kõige huvitavamad meetodid, mis on rühmitatud eesmärgi järgi:

Stringidega töötamise meetodid
meetod Struktuur ja ülekoormused Eesmärk
Stringide võrdlus
võrdle () public static int Võrdle(string strA, string strB)

Avalik staatiline int Võrdle (string strA, string strB, bool ignoreCase)

Avalik staatiline int Võrdle(string strA, string strB, StringComparison võrdlustüüp)

Avalik staatiline int Võrdle (string strA, string strB, bool ignoreCase, CultureInfo kultuur)

Staatiline meetod võrdleb stringi strA stringiga strB. Tagastab positiivse väärtuse, kui strA on suurem kui strB; negatiivne väärtus, kui strA on väiksem kui strB; ja null, kui stringid strA ja strB on võrdsed. Võrdlusi tehakse registri ja kultuuri alusel.

Kui ignoreCase väärtus on tõene, ei võeta võrdluses arvesse erinevusi suur- ja väiketähtede vahel. Vastasel juhul võetakse neid erinevusi arvesse.

Parameeter võrdlusType määrab stringide võrdlemise konkreetse viisi. CultureInfo klass on määratletud nimeruumis System.Globalization.

public static int Võrdle (string strA, int indeksA, string strB, int indeksB, int pikkus)

Avalik staatiline int Võrdle (string strA, int indexA, string strB, int indexB, int pikkus, bool ignoreCase)

Avalik staatiline int Võrdle (string strA, int indeksA, string strB, int indeksB, int pikkus, stringivõrdluse võrdlustüüp)

Avalik staatiline int Võrdle (string strA, int indexA, string strB, int indexB, int pikkus, bool ignoreCase, CultureInfo kultuur)

Võrdleb stringide strA ja strB osi. Võrdlus algab stringielementidega strA ja strB ning hõlmab pikkusparameetriga määratud märkide arvu. Meetod tagastab positiivse väärtuse, kui osa stringist strA on suurem kui osa stringist strB; negatiivne väärtus, kui osa stringist strA on väiksem kui osa stringist strB; ja null, kui stringide strA ja strB võrreldavad osad on võrdsed. Võrdlusi tehakse registri ja kultuuri alusel.

Võrdle Ordinaal() public static int Võrdle Ordinaal(string strA, string strB)

Avalik staatiline int CompareOrdinal(string strA, int indexA, string strB, int indexB, int count)

Teeb sama, mis meetod Compare(), kuid ei võta arvesse kohalikke seadeid

Võrdle() avalik int Võrdle(objekti väärtus)

Võrdleb kutsuvat stringi väärtusobjekti stringi esitusega. Tagastab positiivse väärtuse, kui kutsuv string on stringi väärtusest suurem; negatiivne, kui kutsuv string on väiksem kui väärtus; ja null, kui võrreldavad stringid on võrdsed

public int Võrdle(string strB)

Võrdleb kutsuvat stringi stringiga strB

Võrdub () avalik alistamine bool Võrdub (objekti objekt)

Tagastab tõeväärtuse tõene, kui kutsuv string sisaldab sama märgijada kui objekti obj stringesitus. Teostab järgulise võrdluse, mis on tõstutundlik, kuid kultuuriliselt mittetundlik

public bool võrdub (stringi väärtus)

Avalik tõeväärtus Võrdub (stringi väärtus, stringivõrdluse võrdlustüüp)

Tagastab tõeväärtuse tõene, kui kutsuv string sisaldab sama märgijada kui stringi väärtus. Tehakse järguline võrdlus, mis on tõstutundlik, kuid mitte kultuuritundlik. Parameeter võrdlusType määrab stringide võrdlemise konkreetse viisi

avalik staatiline bool Võrdub (string a, string b)

Avalik staatiline tõeväärtus Võrdub (string a, string b, stringivõrdluse võrdlustüüp)

Tagastab tõeväärtuse tõene, kui string a sisaldab sama märgijada kui string b. Tehakse järguline võrdlus, mis on tõstutundlik, kuid mitte kultuuriliselt tundlik. Parameeter võrdlusType määrab stringide võrdlemise konkreetse viisi

Stringide ühendamine (ühendamine).
Concat() public staatiline string Concat(string str0, string str1);

avalik staatiline string Concat(params stringi väärtused);

Ühendab üksikud stringi eksemplarid üheks stringiks (konkatenatsioon)
Otsige stringist
Sisaldab () public bool Sisaldab (stringi väärtust) Meetod, mis võimaldab teil määrata, kas string sisaldab kindlat alamstringi (väärtust)
Algab() avalik bool Algab(stringi väärtus)

Public bool StartsWith(stringi väärtus, stringivõrdluse võrdlustüüp)

Tagastab tõeväärtuse tõene, kui kutsuv string algab alamstringi väärtusega. Vastasel juhul tagastatakse tõeväärtus false. Parameeter võrdlusType määrab konkreetse viisi otsingu tegemiseks

Lõpeb() avalik bool EndsWith(stringi väärtus)

Public bool EndsWith(stringi väärtus, stringivõrdluse võrdlustüüp)

Tagastab tõeväärtuse tõene, kui kutsuv string lõpeb alamstringi väärtusega. Vastasel juhul tagastab tõeväärtuse false. Parameeter võrdlusType määrab konkreetse otsingumeetodi

IndexOf() public int IndexOf(char value)

Public int IndexOf(stringi väärtus)

Leiab antud alamstringi või tähemärgi esmakordse esinemise stringis. Kui otsitavat märki või alamstringi ei leita, tagastatakse väärtus -1.

public int IndexOf(char value, int startIndex)

Public int IndexOf(stringi väärtus, int algusindeks)

Public int IndexOf(char value, int startIndex, int count)

Public int IndexOf(stringi väärtus, int algusindeks, int count)

Tagastab kutsuvast stringis oleva märgi või alamstringi väärtuse esmakordse esinemise indeksi. Otsing algab startIndexi määratud elemendist ja hõlmab loendusega määratud elementide arvu (kui see on määratud). Meetod tagastab -1, kui otsitavat märki või alamstringi ei leitud

LastIndexOf() Ülekoormatud versioonid on sarnased IndexOf() meetodiga

Sama, mis IndexOf, kuid leiab märgi või alamstringi viimase esinemise, mitte esimese

IndexOfAny() public int IndexOfAny(char anyOf)

Public int IndexOfAny(char anyOf, int startIndex)

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

Tagastab kutsuvast stringist leitud mis tahes tähemärgi esmakordse esinemise indeksi anyOf massiivist. Otsing algab startIndexi määratud elemendist ja hõlmab loendustega määratud elementide arvu (kui see on määratud). Meetod tagastab -1, kui ükski märk massiivi anyOf vastet ei leia. Läbiotsimine toimub tavakorras

LastIndexOfAny Ülekoormatud versioonid on sarnased IndexOfAny() meetodiga

Tagastab kutsuvast stringist leitud mis tahes tähemärgi viimase esinemise indeksi anyOf massiivist

Stringide poolitamine ja ühendamine
Lõhestatud avalik string Tükeldatud (parameetrite tähe eraldaja)

Avalik string Tükeldatud (parameetrite tähe eraldaja, int count)

Meetod, mis tagastab stringimassiivi, mille sees on antud juhul esinevad alamstringid, mis on üksteisest eraldatud määratud tähemärgi või stringimassiivi elementidega.

Meetodi Split() esimene vorm jagab kutsuva stringi selle komponentideks. Tulemuseks on massiiv, mis sisaldab kutsuvast stringist saadud alamstringe. Neid alamstringe piiritlevad märgid edastatakse eraldaja massiivi. Kui eraldaja massiiv on tühi või viitab tühjale stringile, kasutatakse alamstringi eraldajana tühikut. Ja selle meetodi teisel kujul tagastatakse loendusparameetriga määratud alamstringide arv.

avalik string Split (parameetrite tähe eraldaja, StringSplitOptions valikud)

Avalik string Split (stringi eraldaja, StringSplitOptions valikud)

Avalik stringi poolitamine (tähemärkide eraldaja parameetrid, int count, StringSplitOptions valikud)

Avalik string Split (stringi eraldaja, int count, StringSplitOptions valikud)

Meetodi Split() kahes esimeses vormis jagatakse kutsuv string osadeks ja tagastatakse massiiv, mis sisaldab kutsuvast stringist saadud alamstringe. Neid alamstringe eraldavad märgid edastatakse eraldaja massiivi. Kui eraldaja massiiv on tühi, kasutatakse eraldajana tühikut. Ja selle meetodi kolmandas ja neljandas vormis tagastatakse loendusparameetriga piiratud ridade arv.

Kuid kõigil vormidel määrab suvandite parameeter konkreetse viisi tühjade ridade käsitlemiseks, mis tekivad siis, kui kaks eraldajat on kõrvuti. Loend StringSplitOptions määratleb ainult kaks väärtust. Mitte ühtegi Ja Eemalda EmptyEntries. Kui suvandid on Puuduvad, kaasatakse tühjad stringid algse stringi lõpptulemusesse. Ja kui suvandite parameeter on seatud väärtusele RemoveEmptyEntries, jäetakse tühjad read algse stringi poolitamise lõpptulemusest välja.

Liitu () avalik staatiline string Liitu (stringi eraldaja, stringi väärtus)

Avalik staatiline string Liitu (stringi eraldaja, stringi väärtus, int startIndex, int count)

Ehitab uue stringi, kombineerides stringide massiivi sisu.

Meetodi Join() esimene vorm tagastab stringi, mis koosneb väärtusmassiivis edasi antud alamstringidest. Teine vorm tagastab ka stringi, mis koosneb väärtusmassiivis edasi antud alamstringidest, kuid need on ühendatud teatud arvude arvuga, alustades väärtusmassiivi elemendist. Mõlemal kujul on iga järgmine rida eelmisest reast eraldatud eraldusparameetriga määratud eraldusjoonega.

Täite- ja kärpimisliinid
Kärbi () avalik string Trim()

Avalik string Trim (params char trimChars)

Meetod, mis võimaldab eemaldada kõik konkreetse märgikomplekti esinemised aktiivse rea algusest ja lõpust.

Meetodi Trim() esimene vorm eemaldab kutsuvast stringist ees- ja lõputühikud. Ja selle meetodi teine ​​vorm eemaldab trimCharsi massiivist kutsuva märgistringi esi- ja lõpujuhud. Mõlemad vormid tagastavad saadud stringi.

PadLeft() avalik string PadLeft(int totalWidth)

Avalik string PadLeft(int totalWidth, char paddingChar)

Võimaldab täita stringi vasakpoolsete tähemärkidega.

Meetodi PadLeft() esimene vorm lisab väljakutsestringi vasakul küljel tühikud, nii et selle kogupikkus võrdub parameetri totalWidth väärtusega. Ja selle meetodi teises vormis sisestatakse parameetriga paddingChar tähistatud märgid kutsuva stringi vasakule küljele, nii et selle kogupikkus võrdub parameetri totalWidth väärtusega. Mõlemad vormid tagastavad saadud stringi. Kui parameetri totalWidth väärtus on väiksem kui kutsuva stringi pikkus, tagastatakse muutmata väljakutsestringi koopia.

PadRight() Sama mis PadLeft()

Võimaldab lisada paremal olevate tähemärkidega stringi.

Ridade lisamine, kustutamine ja asendamine
Insert () avalik string Sisesta(int algusindeks, stringi väärtus)

Kasutatakse ühe rea lisamiseks teise, kus väärtus tähistab rida, mis lisatakse kutsuvale reale startIndexis. Meetod tagastab saadud stringi.

Eemalda () avalik string Eemalda (int startIndex)

Avalik string Eemalda (int algusindeks, int count)

Kasutatakse stringi osa eemaldamiseks. Meetodi Remove() esimeses vormis algab eemaldamine stardiindeksiga näidatud asukohast ja jätkub rea lõpuni. Ja selle meetodi teisel kujul eemaldatakse stringist loendusparameetriga määratud märkide arv, alustades startIndexi indeksi näidatud kohast.

Asenda () avalik string Asenda (char oldChar, char new Char)

Avalik string Asenda (string oldValue, string newValue)

Kasutatakse stringi osa asendamiseks. Meetodi Replace() esimeses vormis asendatakse kõik märgi oldChar esinemised kutsuvas stringis märgiga newChar. Ja selle meetodi teises vormis asendatakse kõik stringi oldValue esinemised kutsuval real stringiga newValue.

Muuda suurtähte
ToUpper() avalik string ToUpper()

Suurendab kõik kutsungi tähed.

To Lower() avalik string ToLower()

Kõik kutsungi tähed on väikesed.

Alamstringi saamine stringist
Alamstring() avalik string Alamstring(int algusindeks)

Avalik string Alamstring (int algusindeks, sisemine pikkus)

Meetodi Substring() esimesel kujul hangitakse alamstring alates parameetri startIndex näidatud asukohast ja lõpetades kutsuva stringi lõpus. Ja selle meetodi teises vormis ekstraheeritakse alamstring, mis koosneb pikkuse parameetriga määratud märkide arvust, alustades parameetri startIndex näidatud kohast.

Järgmine näidisprogramm kasutab mitut ülaltoodud meetoditest.

Süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.Linq; kasutades System.Text; namespace ConsoleApplication1 ( klass Program ( staatiline void Main(string args) ( // Võrdle kahte esimest rida string s1 = "see on string"; string s2 = "see on tekst ja see on string"); if (String. CompareOrdinal(s1, s2) != 0) Console.WriteLine("Stringid s1 ja s2 ei ole võrdsed"); if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine ("Kuid need sisaldavad sama teksti" // Stringide ühendamine Console.WriteLine(String.Concat("\n" + "One, two ","three, four") // Otsi stringist // / Alamstringi esmaesinemine if (s2. IndexOf("this") != -1) Console.WriteLine("Sõna \"this\" leidub real, see "+ "asub: (0) position", s2.IndexOf("this")); / Alamstringi viimane esinemine if (s2.LastIndexOf("this") != -1) Console.WriteLine("Sõna \"this\" viimane esinemine on " + "asendis (0)", s2.LastIndexOf("this" )); // Otsi tähemärkide massiivist char myCh = ("Y","x","t"); if (s2. IndexOfAny(myCh) != -1) Console.WriteLine("Üks tähemärki massiivist ch "+ "leitud praeguselt realt positsioonilt (0)", s2.IndexOfAny(myCh));

// Määrab, kas rida algab antud alamstringiga if (s2.StartsWith("see on tekst") == true) Console.WriteLine("Alamstring leitud!");

// Määrake, kas string sisaldab alamstringi // kasutades kasutaja operatsioonisüsteemi stringi määramise näidet myOS = Environment.OSVersion.ToString();

    if (myOS.Contains("NT 5.1")) Console.WriteLine("Teie operatsioonisüsteem on Windows XP");

    Ja teiseks saab võrrelda kultuurist sõltumata ainult stringi moodustavate tegelaste järguväärtuste järgi. Üldiselt kasutavad stringide mittekultuurilised võrdlused leksikograafilist järjestust (ja keelelisi tunnuseid), et teha kindlaks, kas üks string on suurem, väiksem või võrdne teisest stringist. Järjekorras võrdluses järjestatakse stringid lihtsalt iga märgi muutmata väärtuse alusel.

Kultuuriliste stringide ja järguliste võrdluste erinevuste ja iga sellise võrdluse tagajärgede tõttu soovitame tungivalt järgida Microsofti praegu pakutavaid parimaid tavasid. Lõppude lõpuks võib stringide võrdlemiseks vale meetodi valimine kaasa tuua programmi vale töö, kui seda kasutatakse keskkonnas, mis erineb sellest, milles see välja töötati.

Tähemärkide jadade võrdlemise valik on väga oluline otsus. Üldreeglina ja eranditult peaksite valima stringide võrdlemise kultuuriliselt tundlikul viisil, kui seda tehakse eesmärgiga kuvada tulemust kasutajale (näiteks leksikograafilises järjekorras sorteeritud stringide seeria kuvamiseks). Kui aga stringid sisaldavad fikseeritud teavet, mida ei ole ette nähtud kultuuriliste erinevuste järgi muutmiseks, näiteks faili nimi, märksõna, veebisaidi aadress või turbeväärtus, peaksite valima järgulise stringi võrdluse. Loomulikult määravad konkreetse arendatava rakenduse omadused märgistringide võrdlemiseks sobiva meetodi valiku.

Klass String pakub mitmesuguseid stringide võrdlusmeetodeid, mis on loetletud ülaltoodud tabelis. Kõige universaalsem neist on meetod Compare (). See võimaldab võrrelda kahte stringi täielikult või osaliselt, tõstutundlikult või tõstutundlikult, tüübiparameetriga määratud viisil StringComparison, samuti tüübiparameetri pakutavat kultuuriteavet Kultuuriinfo.

Need meetodi Compare() ülekoormused, mis ei sisalda parameetrit StringComparison, teostavad märgistringide tõstu- ja kultuuritundlikku võrdlust. Ja nendes ülekoormatud variantides, mis ei sisalda CultureInfo tüüpi parameetrit, määrab kultuurikeskkonna teabe praegune käituskeskkond.

Tüüp StringComparison on loend, mis määratleb allolevas tabelis näidatud väärtused. Neid väärtusi kasutades saate luua stringide võrdlusi, mis vastavad teie konkreetse rakenduse vajadustele. Seetõttu laiendab StringComparison-tüüpi parameetri lisamine meetodi Compare() ja teiste võrdlusmeetodite (nt Equals() võimalusi. See võimaldab ka üheselt näidata, kuidas stringe on ette nähtud võrrelda.

Kultuuritundlike stringivõrdluste ja järguliste võrdluste erinevuste tõttu on oluline olla selles osas võimalikult täpne.

Väärtused, mis on määratletud loendis StringComparison
Tähendus Kirjeldus
Praegune kultuur Stringide võrdlused tehakse praeguste kultuurikeskkonna seadete abil
CurrentCultureIgnoreCase Stringide võrdlused tehakse praeguste kultuuriseadete abil, kuid need ei ole tõstutundlikud
Muutmatu kultuur Stringide võrdlemisel kasutatakse muutumatuid, st. universaalsed andmed kultuurikeskkonna kohta
InvariantCultureIgnoreCase Stringide võrdlemisel kasutatakse muutumatuid, st. universaalsed kultuuriandmed ja tõstutundlikud
Korduv Stringide võrdlused tehakse stringis olevate märkide järjekorraväärtuste abil. Sel juhul võib leksikograafiline järjekord olla häiritud ja konkreetses kultuurikeskkonnas omaksvõetud tavasid eiratakse
OrdinalIgnoreCase Stringide võrdlemisel kasutatakse stringis olevate märkide järjekorraväärtusi, kuid need ei ole tõstutundlikud

Igal juhul tagastab meetod Compare() negatiivse väärtuse, kui esimene võrreldud string on teisest väiksem; positiivne, kui esimene võrreldav string on suurem kui teine; ja lõpuks null, kui mõlemad võrreldavad stringid on võrdsed. Kuigi meetod Compare() tagastab nulli, kui võrreldavad stringid on võrdsed, on üldiselt parem kasutada meetodit Equals() või operaatorit ==, et teha kindlaks, kas märgistringid on võrdsed.

Fakt on see, et meetod Compare() määrab võrreldavate stringide võrdsuse nende sortimisjärjestuse alusel. Seega, kui stringide vahel kultuurilist võrdlust teha, võivad mõlemad stringid oma sortimisjärjekorras olla samad, kuid mitte sisuliselt võrdsed. Vaikimisi määratakse stringi võrdsus meetodi Equals() abil, mis põhineb märkide järguväärtustel ja arvestamata kultuurikeskkonda. Seetõttu võrreldakse selles meetodis vaikimisi mõlemat stringi absoluutse märgihaaval võrdsuse saamiseks, sarnaselt sellele, kuidas seda tehakse operaatori == puhul.

Vaatamata meetodi Compare() suurele mitmekülgsusele on märgistringide lihtsate järgarvude võrdlemiseks lihtsam kasutada CompareOrdinal() meetodit. Lõpuks pidage meeles, et CompareTo() meetod teostab ainult kultuuriliselt tundlikke stringide võrdlusi.

Järgmine programm demonstreerib meetodite Compare(), Equals(), CompareOrdinal() ning operaatorite == ja != kasutamist märgistringide võrdlemiseks. Pange tähele, et kaks esimest võrdlusnäidet näitavad selgelt erinevusi kultuuriliselt tundlike stringide võrdluste ja järguliste võrdluste vahel ingliskeelses keskkonnas:

Süsteemi kasutamine; class Näide ( staatiline void Main() ( string str1 = "alfa"; string str2 = "alfa"; string str3 = "beeta"; string str4 = "alfa"; string str5 = "alfa, beeta"; int tulemus; / / Esmalt demonstreerige erinevusi kultuuritundliku stringide võrdluse // ja järgu võrdluse vahel = String.Compare(str1, str2, StringComparison.CurrentCulture) ("Kultuuritundlik stringide võrdlus: " ) Console.WriteLine); (str1 + " suurem kui " + str2); else Console.WriteLine(str1 + " võrdub " + str2) tulemus = String (str1, str2, StringComparison. lines: "); if (tulemus 0 ) Console.WriteLine(str1 + " suurem kui " + str2); else Console.WriteLine(str1 + " võrdub " + str4) // Kasutage meetodit CompareOrdinal() result = String.CompareOrdinal( str1, str2); .Write("Stringide võrdlemine CompareOrdinal():\n" abil; if (tulemus 0) Console.WriteLine(str1 + " suurem kui " + str2) else Console.WriteLine(str1 + " võrdub " + str4);

Console.WriteLine();

// Stringi võrdsuse määramine operaatori == abil // See on märgistringide järguline võrdlus if (str1 == str4) Console.WriteLine(str1 + " == " + str4); // Rea ebavõrdsuse defineerimine operaatori != abil if(str1 != str3) Console.WriteLine(str1 + " != " + str3);

if(str1 != str2) Console.WriteLine(str1 + " != " + str2);
Console.WriteLine();
// Tehke stringide tõstutundlik järgarvude võrdlus // kasutades meetodit Equals() if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Stringide võrdlus meetodi Equals() abil " + "Parameeter OrdinalIgnoreCase: \n" + str1 + " võrdub " + str2);
Console.WriteLine();
// Stringide osade võrdlemine if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Võrdle stringe, võttes arvesse hetke kultuurikeskkonda:" + "\n3 stringi " + str2 + " esimesi märke rohkem kui rea 3 esimest tähemärki " + str5); ) ) )

Selle programmi käivitamine annab järgmise väljundi: PV-s on 4 tüüpi statistikat:

Tugevus, osavus, vastupidavus, intelligentsus.

Vastupidavus (edaspidi CON) - Suurendab füüsilist kaitsevõimet (edaspidi Def) Vaatamata sellele, et tegelaskuju jaoks on palju erinevaid ehitusi.

Kahjustaja

DEX STR ARBUR– rohkem statistikat STR-i kohta vastavalt kerge soomuse miinimumnõuetele, ülejäänud DEX-is.

DEX vibulaskjatel on väga suured vigastused ja seetõttu suudavad nad suurepäraselt tappa pahaaimamatut tegelast selga. Kuid nende väikese HP hulga tõttu on neid lihtne tappa, mis muudab need Guild Warsis (edaspidi GW) vähem kasulikuks.

JAOKS: Suur kahju, suur põiklemisvõimalus, suur tabamuse võimalus.
VASTU: Väike kogus HP-d.

Tank

DEX CON ARCHER– pumpa STR ja DEX üles vastavalt kergesoomuse miinimumnõuetele, ülejäänu on CON-is.

DEX CONi vibukütid on ehk need, mida me võiksime nimetada libahundiks. Nad teevad suurepärast tööd inimsõdalaste vastu, keda Amburid kardavad kõige rohkem. Ehkki kahjustuste puudumisel on inimsõdalaste vastu võitlemiseks kasutatav põhioskus "välk" tüüpi oskus, kuna need metallielemendi oskused (seega läbistavad inimsõdalase peamise eelise - tema soomuse). Sellised oskused nagu "Lightning" omavad teatud kindlat kahju, mis vähendab trahvi väikese kahju korral (madala DEX-iga).

JAOKS: Kõrge eraldusvõimega väärtus ja suur hulk HP-d.
VASTU: Väike kahju, väike põiklemisvõimalus, väike tabamuse võimalus.

DEX CON STR ARCHER- Pump up STR vastavalt miinimumnõuetele kerge soomus, pumbata DEX vastavalt miinimumnõuetele vibu/ristvibu, ülejäänu on kõik CON.

Veidi kõrgem CON-indeks lahendab imetamise ajal ellujäämise probleemi. Samuti aitab see ellu jääda FB-s (Instances, Dungeons) ja tavalises mängus maagiat kasutavate koletiste vastu. (Magikul on 100% tabamusvõimalus, mis muudab dodge kasutuks). Kahju ei erine palju puhtast DEX Archerist.

JAOKS:Üsna kõrge: kahju, põiklemisvõimalus, tabamuse võimalus. Keskmine HP kogus. Kõrgem Def võrreldes DEX Archeriga.
VASTU: Sama mis FOR.

Nendest kolmest konstruktsioonist soovitan väga hübriidehitust. Põhjus on ilmne: PVP-s on kahjustused vähenenud 75% -ni, seetõttu pole puhtal kahjustusel konstruktsioonil mõtet. 2. fakt: enamik Archer oskusi jagab komplekti (oskuste) kahjustusi + relvakahjustusi, seega vähendab see puhta kahjustuse (DEX build) eelist. Ja mis puudutab 3. fakti: maagial on 100% tabamusvõimalus ja deemoni teed järginud Amburil on 2 oskust 100% tabamusprotsentiga, mis muudab palju HP omamise olulisemaks.

Statistikat saab muuta ainult kahel viisil: kandes teatud tüüpi soomust (komplekti) või kasutades tätoveeringuid.


Sa tahtsid lahedat tätoveeringut (sümbol). Mida sa teed? Noh, muidugi, lähed salongi, valid kujunduse, valid värvid ja meister kinnitab sulle hoolikalt õlale möirgava tiigri. Nii et mängus vajate: salongi (võlupood igas linnas), tätoveeringute tegijat, 10 viaali värvainet ja natuke raha tehtud teenuse eest.


Mängus on kahte tüüpi värve – lihtsad (Dye), millest 20. tasemele jõudes ja esimese elukutse saamisel saad endale teha kaks tätoveeringut. Neid värve saate alati osta otse võlupoest. Ja seal on ka kvaliteetsed värvid (Greater Day). Nendega saate teha kuni kolm tätoveeringut, kuid alles pärast 40. taseme saavutamist ja teise elukutse saamist. Neid värvaineid saab osta Mammoni kauplejalt nekropolides, Elevandiluutornis või teatud koletiste käest maha visata. Kui teie tase on alla 20, ei saa te tätoveeringuid teha. Miks aga rikkuda noort nahka igasuguste vastikute asjadega?


Käisid salongis, kunstnik tegi sulle tätoveeringu, kuid selles on midagi, mis sulle ei meeldi – kas värv on vale või kunstnik ei olnud eriti ettevaatlik ja kujundus jäi veidi uduseks või võib-olla sa ei tahtnud üldse möirgavat tiigrit ja õrna roosi. Seejärel saate veidi raha makstes ja tätoveerijaga (Tattoo Maker) kokku leppides vana tätoveeringu maha pesta, mis teile ei meeldi. Kuid selle eest, et peate selle protseduuri taluma, tagastab meister pooled värvid.

Kui tegite tätoveeringu juba nooruses (enne 40. taset), siis selle värvid tuhmuvad ja see muutub passiivseks (statistikat ei mõjuta). Peate need maha pesta ja uued, täiskasvanud. Nõus, on kuidagi ebamugav ilmuda avalikkuse ette, kandes karikakraid ja liblikat, kui olete üle 40-aastane.


Mis statistika ja kuidas tätoveering täpselt muutub, on kirjas värvipurgil – täpselt nagu apteegis. “+” suurendab teatud statistikat näidatud summa võrra, “-” vähendab seda vastavalt. Millise valida, et see meeldiks teile mõlemale ja ei häbeneks seda teistele näidata?


Kõikidel tätoveeringutel on nii “+” kui “-”. Pealegi on neid, milles “-” on palju suurem, need on ilmselt tavalised Hiina võltsingud. Leitakse ka kaubamärgiga värve, neil on samad tähendused “+” ja “-”. Kuid reeglina saab neid osta spekulantide käest, suure raha eest ja isegi siis pole need nii levinud kui teised.


Stat ei saa tätoveeringute abil suurendada rohkem kui +5 võrra. Näiteks on teil kaks kujundust +3 ja +3, statistika on endiselt +5. Kuid stati langus on piiramatu, kahjuks on ainult see, et see ei saa langeda alla 1. Näiteks kui tätoveeringute komplekt annab WIT-stati väärtuseks -12 ja selle algväärtus inimsõdalase jaoks on algselt 11 , siis jääb stat 1, mitte 0.

Klasside värvi saadavuse tabel.



Elementaarne kutsuja

Phantom Summoner

Nüüd vaatame, milliseid jooniseid kellele ja millisesse kohta süstida. Mulle meeldib endiselt tiiger õlal, Stalin rinnal ja süda puusal, aga maitsed on erinevad. Loomulikult valib igaüks ise, kuid enam-vähem universaalseid komplekte saab vaadata allpool:


Kuristik Walker, Treasure Hunter: tõstame DEX-i sama mugavalt kui kõik teised, kiirus on pistoda jaoks peamine ja +MEN-WIT kaitse mustkunstnike eest ei takista neid kunagi.


Tasandikud Kõndija: +DEX-STR (kiirus, täpsus, täpsus)

WIT-INT (valatud)

CON-STR (lisage HP)


Tume Avenger: soolomängu puhul on eelistatav tõsta STR-i, umbes nii: +STR–DEX, +STR-CON

Peotanki jaoks kindlasti +CON-STR


Shillien Rüütel: +CON-STR (purgipaak)

INT-WIT (aitab debuffides, kuigi ründekiirus väheneb)


Hävitaja: Kiirtuletankile on hea variant: Blue Wolf raske +5STR +4DEX -9CON ja tavaline kahekäerelv. Kas kujutate ette, mis juhtub, kui lisate buffid?


Nekrut, nõid, loitsija:+WIT–MEN (täiustuv kast)

INT-MEN (maagilise rünnaku kiiruse suurendamine)

STR+CON (lisa HP)


Spellsinger: valikuid on mitu:

1. +WIT–MEN, +CON-STR, +DEX-STR: tapke füüsiline rünnak, sest Tal pole seda vaja, lisame kiirust ja cast.

2. Maagiliste võimaluste maksimeerimine: +INT-MEN, +WIT–MEN. Pigistame temast välja maksimaalsed mustkunstioskused, kuid selles olukorras vajame erakonnas kindlasti tuge.



Mida muud lugeda