Funkcije za obradu stringova u C. Funkcije za obradu stringova u C Glavne funkcije standardne biblioteke string.h

U programu se nizovi mogu definirati na sljedeći način:

  • kao string konstante;
  • kao nizovi znakova;
  • preko pokazivača na tip karaktera;
  • kao nizovi nizova.

Dodatno, za pohranjivanje niza mora biti osigurana alokacija memorije.

Svaki niz znakova zatvoren u dvostrukim navodnicima "" tretira se kao string konstanta.

Za ispravan izlaz, svaki niz mora završiti nultom karakterom "\0", čija je cjelobrojna vrijednost 0. Kada se deklarira niz konstanta, nulti znak joj se automatski dodaje. Dakle, niz znakova, koji je niz konstanta, biće smešten u RAM računara, uključujući nulti bajt.

Uzastopne RAM ćelije se dodjeljuju za pohranjivanje niza. Dakle, string je niz znakova. 1 bajt se dodjeljuje za pohranjivanje koda svakog znaka u nizu.

Da bi se neki uslužni znakovi smjestili u konstantu niza, koriste se kombinacije znakova. Dakle, ako trebate uključiti znak dvostrukog navodnika u niz, njemu mora prethoditi obrnuta kosa crta: ‘\”’ .

String konstante se nalaze u statičkoj memoriji. Početna adresa niza znakova u dvostrukim navodnicima se tretira kao adresa stringa. String konstante se često koriste za pružanje interakcije korisnika u funkcijama kao što je printf().

Prilikom utvrđivanja niz znakova trebate reći kompajleru potrebnu veličinu memorije.

char m;

Kompajler također može samostalno odrediti veličinu niza znakova ako je inicijalizacija niza specificirana kada je deklarirana kao konstanta niza:

char 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"};

U ovom slučaju, imena m2 i m3 su pokazivači na prve elemente niza:

  • m2 je ekvivalentno &m2
  • m2 je ekvivalentno 'G'
  • m2 je ekvivalentno 'o'
  • m3 je ekvivalent &m3
  • m3 je ekvivalentno 'x'

Kada deklarirate niz znakova i inicijalizirate ga konstantom niza, možete eksplicitno navesti veličinu niza, ali navedena veličina niza mora biti veća od veličine inicijalizirajuće string konstante:

char m2= "Planinski vrhovi spavaju u tami noći.";

Za postavljanje stringa možete koristiti pokazivač na tip karaktera.

char *m4;

U ovom slučaju, deklariranjem niza, varijabli m4 može se dodijeliti adresa niza:

m4 = m3;
*m4 je ekvivalentno m3="T"
*(m4+1) je ekvivalentno m3="i"

Ovdje je m3 pokazivačka konstanta. Ne možete promijeniti m3, jer bi to značilo promjenu lokacije (adrese) niza u memoriji, za razliku od m4.

Za pokazivač, možete koristiti operaciju povećanja (prelazak na sljedeći znak):

Nizovi znakovnih nizova

Ponekad je programima potreban opis niz znakovnih nizova. U ovom slučaju, možete koristiti indeks reda za pristup više različitih redova.

char *pjesnik = ( "Pesnik je umro!", "- rob časti -",
"Pao", "oklevetan glasinama..."};

U ovom slučaju, poet je niz koji se sastoji od četiri pokazivača na nizove znakova. Svaki niz znakova je niz znakova, tako da postoje četiri pokazivača niza. Pokazivač pjesnika upućuje na prvi red:
*pjesnik ekvivalentno "P",
*pjesnik[l] ekvivalentno "-" .

Inicijalizacija se vrši prema pravilima definiranim za nizove.
Citirani tekstovi su ekvivalentni inicijalizaciji svakog stringa u nizu. Zarez odvaja susjedne
sekvence.
Također možete eksplicitno postaviti veličinu nizova znakova koristeći opis poput ovog:

char poet;

Razlika je u tome što ovaj oblik definira "pravougaoni" niz u kojem su svi redovi iste dužine.

Slobodni niz

Opis

char *pjesnik;


definira slobodni niz, gdje je dužina svake linije određena pokazivačem koji inicijalizira ovu liniju. Slobodni niz ne troši memoriju.

Operacije sa stringovima

Većina C operacija koje se bave nizovima radi sa pokazivačima. Da stavite niz znakova u RAM, morate:

  • dodijeliti blok RAM-a za niz;
  • inicijalizirati string.

Da biste dodijelili memoriju za pohranjivanje niza, mogu se koristiti funkcije dinamičke dodjele memorije. U ovom slučaju, potrebno je uzeti u obzir potrebnu veličinu linije:

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

Za unos stringa koristi se funkcija scanf(), a uneseni niz ne može biti duži od 9 znakova. Posljednji znak će sadržavati "\0" .

Funkcije za unos stringova

Funkcija scanf() se može koristiti za unos stringa. Međutim, scanf() je dizajniran da dohvati riječ, a ne niz. Ako koristite format "%s" za unos, red se unosi prije (ali ne uključujući) sljedećeg praznog znaka, koji može biti razmak, tabulator ili novi red.

Da biste unijeli niz, uključujući razmake, koristite funkciju

char * gets(char *);


ili njegov ekvivalent

char * gets_s(char *);

Pointer na string koji se unosi se prosljeđuje kao argument funkciji. Funkcija traži od korisnika da unese string, koji postavlja u niz sve dok korisnik ne pritisne Enter.

Funkcije izlaza niza

Za izlaz nizova, možete koristiti prethodno razmatranu funkciju

printf("%s" , str); // str - pokazivač na string

ili u skraćenom formatu

printf(str);

Funkcija se također može koristiti za izlaz nizova

int stavlja (char *s);

koji štampa string s i pomera kursor u novi red (za razliku od printf()). Funkcija puts() se također može koristiti za izlaz string konstanti zatvorenih u navodnicima.

Funkcija unosa znakova

Funkcija se može koristiti za unos znakova

char getchar();


koji vraća vrijednost znaka unesenog sa tastature. Ova funkcija je korištena u prethodno razmotrenim primjerima za odlaganje prozora konzole nakon što se program izvrši dok se ne pritisne tipka.

Funkcija izlaza znakova

Funkcija se može koristiti za izlaz znakova

char putchar(char);


koji vraća vrijednost znaka koji treba ispisati i ispisuje znak proslijeđen kao argument na ekran.

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

#include
#include
#include
int main() (
char s, sym;
int count, i;
system("chcp 1251" );
system("cls");
printf( "Unesite niz: ");
gets_s(s);
printf( "Unesite znak: ");
sym = getchar();
count = 0;
za (i = 0; s[i] != "\0" ; i++)
{
if (s[i] == sym)
count++;
}
printf("U redu\n" );
stavlja(e); // Izlaz niza
printf("znak");
putchar(sym); // Izlaz simbola
printf( "pojavljuje se %d puta", count);
getchar(); getchar();
return 0;
}

Rezultat izvršenja

Glavne funkcije standardne biblioteke string.h

Glavne funkcije standardne biblioteke string.h su date u tabeli.

Funkcija Opis

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

dodaje s2 na s1, vraća s1

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

dodaje najviše n znakova s2 u s1, završava niz sa "\0", vraća s1

char *strspy(char *s1, char *s2)

kopira string s2 u niz s1, uključujući "\0", vraća s1
);
strncpy(m3, m1, 6); // ne dodaje "\0" na kraju reda
stavlja ( "Rezultat strncpy(m3, m1, 6)");
stavlja (m3);
strcpy(m3, m1);
stavlja ( "Rezultat strcpy(m3, m1)");
stavlja (m3);
stavlja ( "Rezultat strcmp(m3, m1) je");
printf("%d" , strcmp(m3, m1));
strncat(m3, m2, 5);
stavlja ( "Strncat rezultata (m3, m2, 5)");
stavlja (m3);
strcat(m3, m2);
stavlja ( "Strcat rezultata (m3, m2)");
stavlja (m3);
stavlja ( "Broj znakova u nizu m1 je strlen(m1) : ");
printf("%d\n" , strlen(m1));
_strnset(m3, "f" , 7);
stavlja ( "Strnset rezultata(m3, "f" , 7)");
stavlja (m3);
_strset(m3, "k" );
stavlja ( "Strnset rezultata(m3, "k" )");
stavlja (m3);
getchar();
return 0;
}

Rezultat izvršenja

34

--- C# vodič --- Žice

Sa stanovišta redovnog programiranja, string string tip podataka je jedan od najvažnijih u C#. Ovaj tip definira i podržava nizove znakova. U brojnim drugim programskim jezicima, string je niz znakova. A u C#, stringovi su objekti. Stoga je tip stringa referentni tip.

Izgradnja struna

Najjednostavniji način za konstruiranje niza znakova je korištenje string literala. Na primjer, sljedeći red koda dodjeljuje varijablu string reference str referencu na literal niza:

String str = "Primjer stringa";

U ovom slučaju, varijabla str se inicijalizira nizom znakova "Primjer string". Objekt tipa string se također može kreirati iz niza tipa char. na primjer:

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

Jednom kada se kreira string objekat, može se koristiti svuda gde vam je potreban niz teksta zatvoren u navodnicima.

String persistence

Čudno je da se sadržaj objekta tipa string ne može promijeniti. To znači da kada je niz znakova kreiran, ne može se mijenjati. Ali ovo ograničenje doprinosi efikasnijoj implementaciji znakovnih nizova. Stoga se ovaj naizgled očigledan nedostatak zapravo pretvara u prednost. Dakle, ako je niz potreban kao varijacija postojećeg stringa, onda u tu svrhu treba kreirati novi niz koji sadrži sve potrebne promjene. A pošto se neiskorišteni string objekti automatski skupljaju kao smeće, ne morate čak ni da brinete o sudbini nepotrebnih nizova.

Treba, međutim, naglasiti da su varijabilne reference na stringove (tj. objekte tipa string) podložne promjenama, pa se stoga mogu odnositi na drugi objekt. Ali sadržaj samog string objekta se ne mijenja nakon što je kreiran.

Pogledajmo primjer:

Static void addNewString() ( string s = "Ovo je moj potez"; s = "Ovo je novi potez"; )

Hajde da kompajliramo aplikaciju i učitamo rezultirajući sklop u uslužni program ildasm.exe. Slika prikazuje CIL kod koji će biti generiran za void addNewString() metod:

Imajte na umu da postoje brojni pozivi opkodu ldstr (učitavanje niza). Ovaj CIL ldstr opcode izvodi učitavanje novog string objekta na upravljanu hrpu. Kao rezultat toga, prethodni objekat koji je sadržavao vrijednost "Ovo je moj udar" će na kraju biti sakupljen.

Rad sa stringovima

U razredu System.String obezbeđen je skup metoda za određivanje dužine znakovnih podataka, traženje podniza u trenutnom nizu, pretvaranje znakova iz velikih u mala slova i obrnuto, itd. Zatim ćemo detaljnije pogledati ovu klasu.

Svojstvo polja, indeksera i string klase

String klasa definira jedno polje:

Javni statički string samo za čitanje Empty;

Polje Empty označava prazan niz, tj. string koji ne sadrži znakove. Ovo se razlikuje od prazne string reference, koja se jednostavno pravi nepostojećem objektu.

Pored toga, klasa String definira jedan indeksator samo za čitanje:

Javno označi ovo (dobi;)

Ovaj indeksator vam omogućava da dobijete znak na određenom indeksu. Indeksiranje stringova, kao i nizova, počinje od nule. String objekti su postojani i ne mijenjaju se, tako da ima smisla da klasa String podržava indeksator samo za čitanje.

Konačno, klasa String definira jedno svojstvo samo za čitanje:

Javna int dužina ( get; )

Svojstvo Length vraća broj znakova u nizu. Primjer ispod pokazuje upotrebu indeksera i svojstva Length:

Korišćenje sistema; class Primjer ( static void Main() ( string str = "Jednostavan string"; // Dobivamo dužinu niza i 6. znak u retku pomoću indeksera Console.WriteLine("Dužina niza je (0), 6. karakter je "(1)"" , str.Dužina, str);

Operatori klase string

String klasa preopterećuje sljedeća dva operatora: == i !=. Operator == se koristi za testiranje jednakosti dva niza znakova. Kada se operator == primjenjuje na reference objekata, on obično testira da li su obje reference napravljene na isti objekt. A kada se operator == primeni na reference na objekte tipa String, sadržaj samih nizova se poredi radi jednakosti. Isto važi i za operator !=. Kada se primjenjuje na reference na objekte tipa String, sadržaj samih nizova se poredi za nejednakosti. Međutim, drugi relacijski operatori, uključujući =, uspoređuju reference na objekte tipa String na isti način kao što uspoređuju reference na objekte drugih tipova. A da biste provjerili da li je jedan string veći od drugog, trebali biste pozvati metodu Compare() definiranu u klasi String.

Kao što će postati jasno, mnoge vrste poređenja znakovnih nizova oslanjaju se na kulturne informacije. Ali ovo se ne odnosi na operatore == i !=. Uostalom, oni jednostavno upoređuju redne vrijednosti znakova u nizovima. (Drugim riječima, oni uspoređuju binarne vrijednosti znakova koji nisu modificirani kulturnim normama, odnosno standardima lokalizacije.) Stoga, ovi operatori izvode poređenja nizova na način bez obzira na velika i mala slova i neosjetljiv na kulturu.

Metode string klase

Sljedeća tabela navodi neke od najzanimljivijih metoda u ovoj klasi, grupirane po namjeni:

Metode rada sa nizovima
Metoda Struktura i preopterećenja Svrha
Poređenje nizova
uporedi() public static int Compare (string strA, string strB)

Public static int Compare (string strA, string strB, bool ignoreCase)

Public static int Compare (string strA, string strB, StringComparison CompareType)

Public static int Compare (string strA, string strB, bool ignoreCase, CultureInfo kultura)

Statička metoda uspoređuje string strA sa stringom strB. Vraća pozitivnu vrijednost ako je strA veći od strB; negativna vrijednost ako je strA manji od strB; i nula ako su stringovi strA i strB jednaki. Poređenja se vrše na osnovu registra i kulture.

Ako ignoreCase procijeni na true, poređenje ne uzima u obzir razlike između velikih i malih slova. IN inače ove razlike se uzimaju u obzir.

Parametar CompareType specificira specifičan način poređenja nizova. Klasa CultureInfo definirana je u imenskom prostoru System.Globalization.

public static int Compare (string strA, int indexA, string strB, int indexB, int dužina)

Public static int Compare (string strA, int indexA, string strB, int indexB, int length, bool ignoreCase)

Public static int Compare (string strA, int indexA, string strB, int indexB, int length, StringComparison CompareType)

Public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo kultura)

Uspoređuje dijelove nizova strA i strB. Poređenje počinje sa elementima stringa strA i strB i uključuje broj znakova specificiranih parametrom dužine. Metoda vraća pozitivnu vrijednost ako je dio stringa strA veći od dijela stringa strB; negativna vrijednost ako je dio niza strA manji od dijela stringa strB; i nula ako su dijelovi stringova strA i strB koji se upoređuju jednaki. Poređenja se vrše na osnovu registra i kulture.

CompareOrdinal() public static int CompareOrdinal(string strA, string strB)

Javni statički int CompareOrdinal(string strA, int indeksA, string strB, int indeksB, int broj)

Radi istu stvar kao i Compare() metoda, ali bez uzimanja u obzir lokalnih postavki

uporedi sa() public int CompareTo(vrijednost objekta)

Uspoređuje pozivni string sa stringovom reprezentacijom objekta vrijednosti. Vraća pozitivnu vrijednost ako je pozivni niz veći od vrijednosti stringa; negativan ako je pozivni niz manji od vrijednosti; i nula ako su upoređeni nizovi jednaki

public int CompareTo(string strB)

Uspoređuje pozivni niz sa stringom strB

jednako() javno nadjačavanje bool jednako (object obj)

Vraća boolean true ako pozivni niz sadrži isti niz znakova kao i reprezentacija stringa za obj. Izvodi redno poređenje koje je osjetljivo na velika i mala slova, ali kulturno neosjetljivo

javni bool jednako (vrijednost niza)

Javni bool Jednako (vrijednost niza, StringComparison ComparisonType)

Vraća logičku vrijednost true ako pozivni niz sadrži isti niz znakova kao i vrijednost stringa. Izvodi se ordinalno poređenje koje je osjetljivo na velika i mala slova, ali ne i kulturno. Parametar CompareType specificira specifičan način na koji se nizovi uspoređuju

javni statički bool jednako (niz a, niz b)

Javni statički bool Jednako (string a, string b, StringComparison Comparison ComparisonType)

Vraća logičku vrijednost true ako string a sadrži isti niz znakova kao string b. Izvodi se ordinalno poređenje koje je osjetljivo na velika i mala slova, ali ne i kulturno. Parametar CompareType specificira specifičan način na koji se nizovi uspoređuju

Konkatenacija (povezivanje) nizova
concat() javni statički string Concat(string str0, string str1);

javni statički string Concat(vrijednosti niza parametara);

Kombinira pojedinačne instance niza u jedan niz (konkatenacija)
Traži u nizu
Sadrži() javni bool Sadrži (vrijednost niza) Metoda koja vam omogućava da odredite da li niz sadrži određeni podniz (vrijednost)
Počinje sa() public bool StartsWith(vrijednost niza)

Javni bool StartsWith(vrijednost niza, StringComparison ComparisonType)

Vraća logičku vrijednost true ako pozivni niz počinje vrijednošću podniza. U suprotnom, vraća se logička vrijednost false. Parametar CompareType specificira specifičan način izvođenja pretraživanja

Završava sa() javni bool EndsWith(vrijednost niza)

Javni bool EndsWith(vrijednost niza, StringComparison ComparisonType)

Vraća logičku vrijednost true ako se pozivajući niz završava vrijednošću podniza. U suprotnom, vraća logičku vrijednost false. Parametar CompareType specificira specifičnu metodu pretraživanja

IndexOf() public int IndexOf(vrijednost znakova)

Javni int IndexOf(vrijednost niza)

Pronalazi prvo pojavljivanje datog podniza ili znaka u nizu. Ako traženi znak ili podniz nije pronađen, onda se vraća vrijednost -1.

public int IndexOf(vrijednost char, int startIndex)

Public int IndexOf(vrijednost niza, int startIndex)

Javni int IndexOf(vrijednost znakova, int startIndex, int broj)

Public int IndexOf(vrijednost niza, int startIndex, int count)

Vraća indeks prvog pojavljivanja vrijednosti znaka ili podniza u pozivnom nizu. Pretraživanje počinje od elementa specificiranog od strane startIndex i obuhvata broj elemenata specificiranih count (ako je navedeno). Metoda vraća -1 ako traženi znak ili podniz nije pronađen

LastIndexOf() Preopterećene verzije su slične metodi IndexOf().

Isto kao IndexOf, ali pronalazi posljednje pojavljivanje znaka ili podniza, a ne prvo

IndexOfAny() public int IndexOfAny(char anyOf)

Public int IndexOfAny(char anyOf, int startIndex)

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

Vraća indeks prvog pojavljivanja bilo kojeg znaka iz niza anyOf koji se nalazi u pozivnom nizu. Pretraživanje počinje od elementa specificiranog od strane startIndex i obuhvata broj elemenata specificiranih count (ako je navedeno). Metoda vraća -1 ako se nijedan znak u nizu anyOf ne podudara. Pretres se vrši na redovan način

LastIndexOfAny Preopterećene verzije su slične metodi IndexOfAny().

Vraća indeks posljednjeg pojavljivanja bilo kojeg znaka iz niza anyOf koji se nalazi u pozivnom nizu

Rastavljanje i spajanje nizova
Split javni string Split (params char separator)

Javni niz Split (params char separator, int count)

Metoda koja vraća niz stringova sa podstringovima prisutnim u ovoj instanci unutra, koji su međusobno odvojeni elementima iz specificiranog char ili niza nizova.

Prvi oblik metode Split() dijeli pozivni niz na njegove sastavne dijelove. Rezultat je niz koji sadrži podnizove dobijene iz pozivajućeg niza. Znakovi koji ograničavaju ove podnizove se prosleđuju u nizu separatora. Ako je niz separatora prazan ili se odnosi na prazan niz, tada se kao separator podniza koristi razmak. I to u drugom obliku ovu metodu vraća broj podnizova specificiranih parametrom brojanja.

javni string Split (params char separator, StringSplitOptions opcije)

Javni string Split (razdjelnik nizova, opcije StringSplitOptions)

Javni string Split (params char separator, int count, StringSplitOptions opcije)

Javni string Split (razdjelnik nizova, int count, StringSplitOptions opcije)

U prva dva oblika metode Split(), pozivni niz se dijeli na dijelove i vraća se niz koji sadrži podnizove dobivene iz pozivajućeg niza. Znakovi koji razdvajaju ove podnizove se prosleđuju u nizu separatora. Ako je niz separatora prazan, tada se kao separator koristi razmak. I u trećem i četvrtom obliku ove metode, vraća se broj redova ograničen parametrom brojanja.

Ali u svim oblicima, parametar opcija specificira specifičan način rukovanja praznim redovima koji se proizvode kada su dva graničnika susjedna. Nabrajanje StringSplitOptions definira samo dvije vrijednosti: Nema I RemoveEmptyEntries. Ako je opcija None, tada su prazni nizovi uključeni u konačni rezultat podjele originalnog niza. A ako je parametar opcija postavljen na RemoveEmptyEntries, tada se prazni redovi isključuju iz konačnog rezultata cijepanja originalnog niza.

pridruži se() javni statički string Join (razdjelnik nizova, vrijednost niza)

Javni statički string Join (razdjelnik nizova, vrijednost niza, int startIndex, int count)

Konstruiše novi string kombinovanjem sadržaja niza nizova.

Prvi oblik metode Join() vraća string koji se sastoji od spojenih podnizova proslijeđenih u niz vrijednosti. Drugi oblik također vraća string koji se sastoji od podnizova proslijeđenih u niz vrijednosti, ali oni su spojeni u određenom broju brojeva, počevši od elementa niza vrijednosti. U oba oblika, svaki sljedeći red je odvojen od prethodnog reda separatorom koji je specificiran parametrom separatora.

Linije za punjenje i obrezivanje
Trim() javni niz Trim()

Javni string Trim(params char trimChars)

Metoda koja vam omogućava da uklonite sva pojavljivanja određenog skupa znakova s ​​početka i kraja tekućeg reda.

Prvi oblik metode Trim() uklanja početne i zadnje razmake iz pozivajućeg niza. A drugi oblik ove metode uklanja početna i zadnja pojavljivanja niza pozivajućih znakova iz niza trimChars. Oba oblika vraćaju rezultujući niz.

PadLeft() javni niz PadLeft(int totalWidth)

Javni niz PadLeft(int totalWidth, char paddingChar)

Omogućava vam da unesete niz znakova na lijevoj strani.

Prvi oblik metode PadLeft() uvodi razmake na lijevoj strani pozivajućeg stringa tako da njegova ukupna dužina postaje jednaka vrijednosti parametra totalWidth. I u drugom obliku ove metode, znakovi označeni parametrom paddingChar unose se na lijevoj strani pozivajućeg stringa tako da njegova ukupna dužina postaje jednaka vrijednosti parametra totalWidth. Oba oblika vraćaju rezultujući niz. Ako je vrijednost parametra totalWidth manja od dužine pozivajućeg niza, tada se vraća kopija nepromijenjenog niza poziva.

PadRight() Isto kao PadLeft()

Omogućava vam da dodate string sa znakovima s desne strane.

Umetanje, brisanje i zamjena redova
Insert() javni string Insert (int startIndex, vrijednost stringa)

Koristi se za umetanje jednog reda u drugi, pri čemu vrijednost označava red koji treba umetnuti u pozivni red na startIndex. Metoda vraća rezultujući niz.

Ukloni() javni niz Ukloni (int startIndex)

Javni niz Ukloni (int startIndex, int count)

Koristi se za uklanjanje dijela niza. U prvom obliku metode Remove(), uklanjanje počinje na lokaciji označenoj startIndexom i nastavlja se do kraja reda. A u drugom obliku ove metode, broj znakova određen parametrom count se uklanja iz stringa, počevši od mjesta označenog indeksom startIndex.

Zamijeni() javni niz Zamijeni (char oldChar, char newChar)

Javni niz Zamijeni (niz oldValue, string novaValue)

Koristi se za zamjenu dijela niza. U prvom obliku Replace() metode, sva pojavljivanja znaka oldChar u pozivnom nizu zamjenjuju se znakom newChar. I u drugom obliku ove metode, sva pojavljivanja niza oldValue u liniji za pozivanje zamjenjuju se nizom newValue.

Promijenite slučaj
ToUpper() javni niz ToUpper()

Piše velika slova u nizu poziva.

ToLower() javni niz ToLower()

Sva slova u nizu za pozivanje napišite mala.

Dobivanje podniza iz niza
podniz() javni niz podniz (int startIndex)

Javni niz podniz (int startIndex, int dužina)

U prvom obliku metode Substring(), podniz se preuzima počevši od lokacije označene parametrom startIndex i završavajući na kraju pozivajućeg niza. A u drugom obliku ove metode izdvaja se podniz koji se sastoji od broja znakova određenih parametrom dužine, počevši od mjesta označenog parametrom startIndex.

Sljedeći primjer programa koristi nekoliko od gore navedenih metoda:

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Text; imenski prostor ConsoleApplication1 ( klasa Program ( static void Main(string args) ( // Uporedite prva dva reda string s1 = "ovo je string"; string s2 = "ovo je tekst, a ovo je string"; if (String. CompareOrdinal(s1, s2) != 0) Console.WriteLine("Strings s1 i s2 nisu jednaki" if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine); ("Međutim, oni sadrže isti tekst" // Konkatenacija stringova Console.WriteLine("\n" + "Jedan, dva ","tri, četiri")); / Prvo pojavljivanje podniza if (s2. IndexOf("this") != -1) Console.WriteLine("Riječ \"this\" se nalazi u redu, nalazi se "+ "na: (0) position", s2.IndexOf("this")); / Posljednje pojavljivanje podniza if (s2.LastIndexOf("this") != -1) Console.WriteLine("Posljednje pojavljivanje riječi \"this\" je " + "na (0) poziciji", s2.LastIndexOf("this" )); // Traži iz niza znakova char myCh = ("Y","x","t"); if (s2. IndexOfAny(myCh) != -1) Console.WriteLine("Jedan od znakova iz niza ch "+ "nađen u trenutnoj liniji na poziciji (0)", s2.IndexOfAny(myCh));

// Određuje da li linija počinje datim podnizom if (s2.StartsWith("ovo je tekst") == true) Console.WriteLine("Podniz pronađen!");

// Odredite da li niz sadrži podniz // koristeći primjer određivanja korisničkog OS stringa myOS = Environment.OSVersion.ToString();

    if (myOS.Contains("NT 5.1")) Console.WriteLine("Vaš operativni sistem je Windows XP");

    I drugo, usporedba se može napraviti bez obzira na kulturološke postavke samo po rednim vrijednostima znakova koji čine niz. Uopšteno govoreći, nekulturna poređenja nizova koriste leksikografski poredak (i ​​jezičke karakteristike) da bi se utvrdilo da li je jedan niz veći, manji ili jednak drugom nizu. U ordinalnom poređenju, nizovi se jednostavno poredaju na osnovu nepromenjene vrednosti svakog znaka.

Zbog razlika u načinu na koji se razlikuju poređenja kulturoloških nizova i poređenja redova, kao i posljedica svakog takvog poređenja, toplo preporučujemo da slijedite najbolje prakse koje trenutno nudi Microsoft. Uostalom, odabir pogrešne metode za poređenje stringova može dovesti do pogrešnog rada programa kada radi u okruženju drugačijem od onog u kojem je razvijen.

Odabir načina upoređivanja znakovnih nizova je vrlo važna odluka. Kao opšte pravilo, i bez izuzetka, trebalo bi da izaberete da uporedite nizove na kulturološki osetljiv način ako se to radi u svrhu prikazivanja rezultata korisniku (na primer, za prikaz niza nizova sortiranih po leksikografskom redosledu). Ali ako stringovi sadrže fiksne informacije koje nisu namijenjene za modificiranje zbog kulturoloških razlika, kao što su naziv datoteke, ključna riječ, adresa web stranice ili sigurnosna vrijednost, tada biste trebali odabrati poređenje rednih nizova. Naravno, karakteristike određene aplikacije koja se razvija će diktirati izbor odgovarajuće metode za poređenje nizova znakova.

Klasa String pruža razne metode poređenja stringova, koje su navedene u gornjoj tabeli. Najuniverzalniji među njima je Compare() metoda. Omogućava da se dva niza uspoređuju u cijelosti ili djelimično, osjetljivo na mala ili velika i mala slova, na način određen parametrom tipa StringComparison, kao i kulturne informacije koje daje parametar tipa CultureInfo.

Ona preopterećenja metode Compare() koja ne uključuju StringComparison parametar izvode poređenje znakovnih nizova osjetljivo na velika i mala slova i kulturu. A u onim preopterećenim varijantama koje ne sadrže parametar tipa CultureInfo, informacije o kulturnom okruženju određuju se trenutnim okruženjem vremena izvršavanja.

Tip StringComparison je enumeracija koja definira vrijednosti prikazane u tabeli ispod. Koristeći ove vrijednosti, možete kreirati poređenja nizova koja odgovaraju potrebama vaše specifične aplikacije. Stoga, dodavanje parametra tipa StringComparison proširuje mogućnosti metode Compare() i drugih metoda poređenja kao što je Equals(). Ovo također omogućava da se nedvosmisleno naznači kako se nizovi trebaju porediti.

Zbog razlika između kulturološki osjetljivih poređenja nizova i rednih poređenja, važno je biti što precizniji u ovom pogledu.

Vrijednosti definirane u nabrajanju StringComparison
Značenje Opis
CurrentCulture Poređenja nizova se vrše korištenjem trenutnih postavki kulturnog okruženja
CurrentCultureIgnoreCase Poređenja nizova se vrše korištenjem trenutnih postavki kulture, ali nisu osjetljiva na velika i mala slova
InvariantCulture Poređenja nizova se vrše korištenjem nepromjenjivih, tj. univerzalni podaci o kulturnom okruženju
InvariantCultureIgnoreCase Poređenja nizova se vrše korištenjem nepromjenjivih, tj. univerzalni kulturni podaci i bez obzira na velika i mala slova
Redni Poređenja nizova se vrše korištenjem rednih vrijednosti znakova u nizu. U tom slučaju leksikografski poredak može biti poremećen, a konvencije usvojene u određenom kulturnom okruženju se zanemaruju
OrdinalIgnoreCase Poređenja nizova se vrše korištenjem rednih vrijednosti znakova u nizu, ali nisu osjetljiva na velika i mala slova

U svakom slučaju, Compare() metoda vraća negativnu vrijednost ako je prvi upoređeni niz manji od drugog; pozitivan ako je prvi upoređeni niz veći od drugog; i konačno, nula ako su oba niza koja se upoređuju jednaka. Iako metoda Compare() vraća nulu ako su stringovi koji se uspoređuju jednaki, općenito je bolje koristiti metodu Equals() ili == operator da odredite jesu li nizovi znakova jednaki.

Činjenica je da Compare() metoda određuje jednakost upoređenih nizova na osnovu njihovog redoslijeda sortiranja. Dakle, ako se napravi kulturološka poređenje između nizova, oba niza mogu na kraju biti ista po svom redoslijedu, ali ne i jednaka u suštini. Po defaultu, jednakost stringova se određuje u metodi Equals(), na osnovu rednih vrijednosti znakova i bez uzimanja u obzir kulturnog okruženja. Prema tome, prema zadanim postavkama, oba niza se porede u ovoj metodi za apsolutnu jednakost znak po znak, slično kako se to radi u == operatoru.

Uprkos velikoj svestranosti metode Compare(), za jednostavna poređenja nizova znakova lakše je koristiti metodu CompareOrdinal(). Konačno, imajte na umu da metoda CompareTo() izvodi samo kulturološki osjetljiva poređenja nizova.

Sljedeći program demonstrira upotrebu metoda Compare(), Equals(), CompareOrdinal() i operatora == i != za poređenje znakovnih nizova. Imajte na umu da prva dva primjera poređenja jasno pokazuju razlike između kulturološki osjetljivih poređenja nizova i rednih poređenja u okruženju engleskog govornog područja:

Korišćenje sistema; Primer klase ( static void Main() ( string str1 = "alfa"; string str2 = "Alfa"; string str3 = "Beta"; string str4 = "alfa"; string str5 = "alfa, beta"; int rezultat; / / Prvo, pokažite razlike između poređenja stringova osjetljivih na kulturu // i rezultata poređenja redova = String.Compare(str1, str2, StringComparison.CurrentCulture) Console.Write("Poređenje stringova osjetljivih na kulturu: ") Console.WriteLine (str1 + "veće od " + str2) Console.WriteLine(str1 + "jednako" + str2, stringCompare.Ordinal); if (rezultat 0); ) Console.WriteLine(str1 + " larger than " + str2 ) Console.WriteLine (str1 + " jednako " + str4) // Koristite CompareOrdinal() rezultat = String.CompareOrdinal(str1, str2); .Write("Upoređivanje stringova pomoću CompareOrdinal():\n" if (rezultat 0) Console.WriteLine(str1 + " veći od " + str2 else Console.WriteLine(str1 + " jednako " + str4);

Console.WriteLine();

// Odredite jednakost nizova pomoću == operatora // Ovo je ordinalno poređenje nizova znakova if (str1 == str4) Console.WriteLine(str1 + " == " + str4);


Htjeli ste cool tetovažu (Simbol). sta radis Pa, naravno, idete u salon, birate dizajn, birate boje, a majstor pažljivo nanosi ričući tigar na vaše rame. Dakle, u igri će vam trebati: salon (magic shop u bilo kom gradu), majstor za tetoviranje, 10 bočica boje i malo novca za obavljenu uslugu.


U igri postoje dvije vrste boja - jednostavne (Dye), od kojih vi, kada ste dosegli nivo 20 i dobili svoju prvu profesiju, možete sebi napraviti dvije tetovaže. Ove boje uvijek možete kupiti direktno u magičnoj radnji. A tu su i visokokvalitetne boje (Greater Day). S njima možete napraviti čak tri tetovaže, ali tek nakon što dostignete nivo 40 i dobijete drugu profesiju. Ove boje se mogu kupiti od Trgovca mamonom na nekropolama, u Kuli od slonovače ili baciti sa određenih čudovišta. Ako je vaš nivo ispod 20, nećete moći da se tetovirate. Međutim, zašto kvariti mladu kožu raznim gadima?


Otišli ste u salon, umjetnik vam je napravio tetovažu, ali postoji nešto što vam se u tome ne sviđa - ili je boja pogrešna, ili umjetnik nije bio previše pažljiv, a dizajn je ispao malo mutan, ili možda uopšte nisi želeo ričućeg tigra i delikatnu ružu. Zatim, uplatom malo novca i dogovorom sa tattoo majstorom (Tattoo Maker), možete oprati staru tetovažu koja vam se ne sviđa. Međutim, zbog činjenice da morate izdržati ovaj postupak, majstor će vratiti polovinu boja.

Ako ste već imali tetovažu u mladosti (prije nivoa 40), tada će njene boje izblijedjeti i ona će postati neaktivna (neće utjecati na statistiku). Morat ćete ih oprati i nanijeti nove, odrasle. Slažete se, nekako je nezgodno pojavljivati ​​se u javnosti noseći tratinčice i ljutike kad imate više od 40 godina.


Kakva je tačna statistika i kako se tetovaža mijenja, napisano je na tegli boje - baš kao u ljekarni. “+” povećava određenu statistiku za naznačeni iznos, “-”, odnosno, smanjuje. Koju da odaberete da vam se oboma dopadne i da se ne sramite pokazati drugima?


Sve tetovaže imaju i “+” i “-”. Štoviše, postoje oni u kojima je "-" mnogo veći, to su očigledno obični kineski lažnjaci. Nalaze se i brendirane boje, imaju ista značenja "+" i "-". Ali, po pravilu, možete ih kupiti od špekulanata, za veliki novac, a ni tada nisu tako česti kao ostali.


Stat se ne može povećati za više od +5 korištenjem tetovaža. Na primjer, imate dva dizajna +3 i +3, statistika će i dalje biti +5. Ali smanjenje stat je neograničeno, nažalost, jedino što ne može pasti ispod 1. Na primjer, ako skup tetovaža daje WIT stat vrijednost -12, a njegova početna vrijednost za ljudskog ratnika je u početku 11 , tada će statistika ostati 1, a ne 0.

Tabela dostupnosti boja za nastavu.



Elemental Summoner

Phantom Summoner

Sada da vidimo koje crteže treba kome ubrizgati i na kojem mjestu. I dalje volim tigra na ramenu, Staljina na grudima i srce na kuku, ali ukusi su različiti. Naravno, svako bira za sebe, ali manje-više univerzalne setove možete pogledati u nastavku:


Bezdan Walker, Treasure Hunter: Podižemo DEX zgodno kao i svi, brzina je glavna stvar za bodež, a +MEN-WIT zaštita od mađioničara im nikada neće nauditi.


Ravnice Walker: +DEX-STR (brzina, tačnost, tačnost)

WIT-INT (cast)

CON-STR (dodati HP)


Dark Avenger: Za solo igru ​​poželjno je podići STR, otprilike ovako: +STR–DEX, +STR-CON

Za tenk za zabavu, definitivno +CON-STR


Shillien Vitez: +CON-STR (kan tank)

INT-WIT (pomoći će kod debuffa, iako će se brzina napada smanjiti)


razarač: Postoji dobra opcija za brzometni tenk: Plavi vuk teški +5STR +4DEX -9CON i normalno dvoručno oružje. Možete li zamisliti šta će se dogoditi ako dodate buffove?


Nekromantica, Čarobnjak, Vroglavac:+WIT–MEN (poboljšanje kaste)

INT-MEN (Povećanje brzine magijskog napada)

STR+CON (dodaj HP)


Spellsinger: Postoji nekoliko opcija:

1. +WIT–MEN, +CON-STR, +DEX-STR: Ubijte fizički napad, jer Ne treba mu, dodajmo brzinu i bacanje.

2. Maksimiziranje magijskih sposobnosti: +INT-MEN, +WIT-MEN. Iz njega cijedimo maksimum magijskih vještina, ali u ovoj situaciji nam je svakako potrebna podrška u stranci.

Postoje 4 vrste statistike u PV: Snaga, spretnost, izdržljivost, inteligencija.

Izdržljivost (u daljem tekstu CON)
- Povećava fizičku odbranu (u daljem tekstu Def)
- Povećava magičnu odbranu (u daljem tekstu Mdef)
- Povećava HP
- Povećava HP regeneraciju (Važno: u borbenom načinu regeneracija HP ​​je smanjena za 75%)

VAŽNO: Ne postoji statistika koja povećava brzinu udarca/pokreta.

Builds!

Postoje 3 glavne vrste - Damager, Tank i Hybrid. Uprkos činjenici da postoji mnogo različitih građa za lik.

Damager

DEX STR ARCHER– više statistike o STR u skladu sa minimalni zahtjevi laki oklop, ostalo u DEX-u.

DEX strijelci imaju izuzetno veliku štetu i stoga su odlični u ubijanju nesuđenog lika u leđima. Ali zbog njihove male količine HP-a, lako ih je ubiti, što ih čini manje korisnim u Guild Wars (u daljem tekstu GW).

ZA: Velika šteta, velika šansa za izbjegavanje, velika šansa za pogodak.
PROTIV: Mala količina HP.

Tank

DEX CON ARCHER– napumpati STR i DEX u skladu sa minimalnim zahtjevima za laki oklop, ostalo je sve u CON.

DEX CON Strijelci su možda ono što bismo mogli nazvati streličarima vukodlaka. Oni rade odličan posao protiv ljudskih ratnika, kojih se Strijelci najviše boje. Iako sa nedostatkom štete, glavna vještina koja se koristi u borbi protiv ljudskih ratnika je vještina tipa „Munja“, budući da ove vještine metalnog elementa (dakle probijaju glavnu prednost Ljudskog ratnika - njegov oklop). Vještine poput "Lightning" imaju određenu postavljenu štetu, što smanjuje kaznu za nisku štetu (sa niskim DEX-om).

ZA: Visoka Def vrijednost i velika količina HP.
PROTIV: Mala šteta, mala šansa za izbegavanje, mala šansa za pogodak.

DEX CON STR ARCHER- Napumpati STR u skladu sa minimalnim zahtjevima za laki oklop, napumpati DEX u skladu sa minimalnim zahtjevima za luk/samostrel, ostalo je sve u CON.

Imati malo više visoka stopa KON rješava problem preživljavanja na dojenju. Također pomaže preživjeti u FB (Instance, Dungeons) iu normalnoj igri protiv čudovišta koja koriste magiju. (Magija ima 100% šanse za pogodak, čineći izbjegavanje beskorisnim). Šteta se ne razlikuje mnogo od čistog DEX Archera.

ZA: Prilično visoka: šteta, šansa izbjeći, šansa za pogodak. Prosječna količina HP. Viša Def u poređenju sa DEX Archerom.
PROTIV: Isto kao FOR.

Od ove 3 verzije, toplo preporučujem hibridnu verziju. Razlog je očigledan: šteta u PVP-u je smanjena na 75%, stoga nema smisla imati čistu izgradnju štete. Druga činjenica: većina Archer vještina nanosi set (vještina) štetu + štetu od oružja, tako da ovo smanjuje prednost izgradnje čiste štete (DEX build). A što se tiče 3. činjenice: magija ima 100% šanse za pogodak, a Strijelac koji je slijedio stazu demona ima 2 vještine sa 100% šansom za pogodak, zbog čega je važnije imati velike količine HP.