Turvalised funktsioonid stringidega töötamiseks c. Tähemärgistringide sisend ja väljund C-s

»Usaldusväärne SEO agentuur India võib suurendada väikeettevõtete tulusid

80% kasutajatest otsivad enne ostu sooritamist Google'ist ja teistest otsingumootoritest ning üle 50% otsingumootorite kaudu tehtud päringutest konverteeritakse. Need kaks statistikat tõestavad otsingumootori optimeerimise tähtsust. Selliseid statistikat ja fakte on palju, mis annavad selge punkti: iga väike, keskmine või suur ettevõte vajab professionaalseid SEO teenuseid. Väikeettevõtted ja idufirmad seisavad sageli silmitsi eelarveprobleemidega. Nad võivad võtta abi mis tahes usaldusväärselt India SEO agentuurilt, et saada oma eelarves parimat SEO-teenust, et suurendada oma tulusid.
Otsingul on suur mõju tarbijate meeltele. Vastavalt statistikale, mida jagavad suuremad otsingumootori optimeerimise eksperdid erinevatel volitatud veebisaitidel, nagu Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot jne. SEO hõivab suurema osa müügivihjetest. Samuti on orgaaniliste otsingutulemuste müügivihjetel kõrgem konversioonimäär. See statistika ja tarbijakäitumine näitavad selgemalt, et parim SEO teenus ei ole luksus, vaid iga ettevõtte jaoks vajalik.
Konkurentsist mööda hiilimiseks ja ärikasvu suurendamiseks peab iga organisatsioon kasutama otsingumootori optimeerimise teenuseid. Suured kaubamärgid saavad investeerida piisavalt raha professionaalse SEO teenuse jaoks, mida pakub tipp SEO ettevõte või SEO spetsialist, kuid väikeettevõtete omanikud teevad selle teenuse kvaliteedis sageli järeleandmisi väiksema eelarve tõttu. On karm tõsiasi, et väikeettevõtted ja idufirmad jätavad lõpuks võimalused, mida saab luua professionaalse SEO teenusega või kasutavad odavat SEO teenust, mis ei anna positiivseid tulemusi.
Väikeettevõtete omanikud ja alustavad ettevõtted saavad professionaalsetest SEO-teenustest kasu isegi piiratud eelarvega. Parim lahendus on leida usaldusväärne SEO ettevõte, mis asub Indiast. Indias on palju SEO eksperte, kes teevad koostööd digitaalse turunduse agentuuriga ja pakuvad oma valdkonna parimaid teenuseid. Nad võivad pakkuda teile vajalikke SEO teenuseid teie eelarve piires. Palga üle saab läbi rääkida India SEO agentuuriga, et saada paremaid teenuseid madalamate hindadega. Ärge aga langege odava SEO teenuse alla, mis maksab vähem ja lubab anda rohkem, kuna asjatundlikkus on oma kulul. Enne ettevõttega lepingu sõlmimist peate nägema portfelli või esitama asjakohaseid küsimusi.
India SEO-eksperdid tunnevad otsingumootoritele optimeerimise parimaid tavasid. Lisaks on Indias mõned SEO spetsialistid, näiteks Ash Vyas, kes on spetsialiseerunud ettevõtte jaoks parima otsingumootori optimeerimise strateegia loomisele määratud eelarvega. SEO spetsialistid koostavad selge plaani ja jagavad ka, millised võivad olla oodatud tulemused. Nii saate oma investeeringust ja tootlusest hästi kursis olla. See aitab teha paremaid äriotsuseid.
Hea mõte on leida usaldusväärne Indiast pärit SEO-ettevõte, mis pakub võimalikult kiiresti parimaid SEO-teenuseid, ja sõlmida sellega leping. Võite alustada ka väikese eelarve ja piiratud tegevustega, et alustada oma veebilehtede indekseerimist ja märksõnade suurendamist otsingumootorites. Ärge oodake ideaalset aega või päeva, mil teil on tuhandeid dollareid, et investeerida parimatesse SEO teenustesse. Varajane alustamine aitab teil saavutada kiiremaid tulemusi, kui saate oma turundusmeetodiga agressiivseks minna. Indiast pärit usaldusväärne SEO-ettevõte aitab teil määratleda teie praegused ja tulevased plaanid heade tulemuste saamiseks. Rohkem indekseeritud lehti tõstsid paremusjärjestust ja teie ettevõtte usaldusväärne bränd, mis on loodud pideva professionaalse SEO praktikaga, kahekordistab päringuid, äritegevust ja tulusid. Iga väikeettevõte võib alustada kahekohalise investeeringuga professionaalsetesse SEO teenustesse. Indias on palju SEO agentuure, mis pakuvad madala eelarvega, kuid tulenevad otsingumootori optimeerimise teenustest.

küsitlusi pagulusest

  • CraigWew

    12.04.2018

    »Kliendiga suhte loomise tähtsus kinnisvara- ja üldmüügis

    Kliendiga suhte loomise tähtsus.
    Kliendiga suhte loomine tuleb välja teenida ja sellele tuleb läheneda kui müügiprotsessi väga lahutamatule osale.
    Selleks, et klient ja iseennast saaksid päriselt üks ühele suhestuma, hõlmab kahte asja!
    Esiteks peate olema teadlik ja kohal! Teiseks peate mõistma, et selle protsessi käigus toimub kaks erinevat etappi.
    A-Ole seal-mida see tähendab?
    o Enamik inimesi ei kuula tegelikult teist inimest, kui ta räägib. Üldjuhul on nad oma järgmise vastuse või väite sõnastamisega nii hõivatud, et nad ei suuda üldse kuulata.
    o Kui see kõlab nagu sina, tähendab seal olemine vait ja kuula!
    B-Mis on esimene ehk esialgne etapp?
    o Üldjuhul on teil vaid mõni minut aega, et kehtestada end klientide silmis inimesena, kellega nad soovivad suhelda.
    o Kahtluse korral on kõige parem esitada esmalt küsimusi, mis tõmbavad neid esile ja räägivad endast.
    o Samuti on alati turvaline esineda professionaalina – ma ei pea silmas stoilist ega kuiva, vaid kedagi, kes teab, mida teeb ja räägib ja vaatab osa.
    C-Teised etapid
    o Aja möödudes saate vestluse ja neile tekkivate küsimuste kaudu oma võime kindlaks teha või mitte.
    o Olge teadlik, et nad tõenäoliselt mõõdavad teid mõnda aega. Hea uudis on see, et kui teil on õnnestunud suhte loomine mingil hetkel, siis nad lõdvestuvad ja saate mõlemad keskenduda kodu leidmisele või müümisele.
    Mis veel aitab mul suhtlust arendada?
    o Püüdes mõista erinevaid isiksusetüüpe ja seejärel öelda ja küsida õigeid küsimusi.
    o Kui sul on hea läbisaamine (olid kliendiga samal lainepikkusel), siis on müük põhimõtteliselt lõppenud, nüüd jääb üle vaid õige kodu leida või noteerimispaberid täita.
    Kuidas on lood erinevate isiksustega
    o Kuna see raamat ei ole psühhiaatriateemaline, mõistke praegu vaid kahte peamist tüüpi.
    o On introvertseid ja ekstravertseid inimesi.
    o Sa tead tüüpi. Mõelge kolmele tuttavale inimesele, kes sobivad igasse klassifikatsiooni.
    Aga kehakeel ja kõnemustrid?
    o Kui nad räägivad kiiresti või aeglaselt, proovige nende kõnemustreid jäljendada.
    o Kui nad räägivad valjult või pehmelt, tehke sama. Kas nad kalduvad ette või taha?
    o Ütlematagi selge, et sellel teemal on kirjutatud palju raamatuid. Pidage lihtsalt meeles, et see on oluline tegur – eriti kui istud konverentsiruumis või kellegi kodus ja arutame 400 000 dollari suurust tehingut.
    Suhtlemise arendamine on oskus, mida saab õppida ja täiendada.
    o Me kõik oleme kogenud müüjat, kes meile midagi müüs, kuid me ei tundnud, et meid müüakse. Põhjus on selles, et ta pani teid tundma end mugavalt seal, kus te neid usaldasite.
    Kuidas arendame suhtlust?
    o Kasutage oma silmi ja kõrvu ning esitage küsimusi. selgitama
    o Kasutage silmi:
    o Vaadake nende kleiti - nende autot - nende isiklikku vara ja ma tõesti mõtlen, et vaadake neid ja mõelge lahti, mida see teile nende kohta ütleb.
    o Kasutage kõrvu:
    o Kuulake, mida nad räägivad, ja esitage küsimusi, et jõuda nende tegeliku MOTIVATSIOONI põhja!
    Nüüd kogu selle vestluse ajal avastate tõenäoliselt ühe või kaks asja, mis teil nendega ühine on. (Perekond, geograafilised piirkonnad, kalapüük jne) Kui leiate ühiseid seisukohti, andke neile teada, et olete tuttav ja seejärel arutlege nendega.
    Mis on eesmärk?
    o Kui nad aktsepteerivad teid ühena nende seast, saate tõeliselt suure müügikogemuse, kuna töötate nüüd koos ja siis meeskonnana – te pole enam see müügimees, kes praegu nõuandval positsioonil .
    o Pea meeles, et klient kas lubab või ei luba sul oma maailma siseneda. Kui mõistate seda ja teete temaga empaatiliseks muutmiseks kõvasti tööd, võite saada usaldusliku positsiooni. Enamikul juhtudel näete neid tegelikult lõõgastumas (kehakeel), kui see juhtub, kui olete teel.
    o Selle illustreerimiseks kas olete kunagi esinenud ja märganud, et kui olete lõpuks mõne kuulajaskonna liikmega ühenduse loonud, noogutavad nad heakskiitvalt. Need asjad võivad tunduda tühised, kuid see pole nii.
    Lõpetuseks, kui saate klientide usalduse teenida, on toote või teenuse müümine palju lihtsam ja kogemus võib olla kõigile asjaosalistele ebameeldiv.
    Pidage alati meeles, et võit/võit on parim olukord.

Stringid. Liin sisend/väljund. Vormindatud I/O. Stringide töötlemine standardsete C keele funktsioonide abil.Töö mäluga.

1.1. Stringide deklareerimine ja initsialiseerimine.

String on märkide massiiv, mis lõpeb tühja märgiga „\0”. String deklareeritakse tavalise märgimassiivina, näiteks

char s1; // üheksa tähemärki pikk string

char*s2; // osuti stringile

Osutite s1 ja s2 erinevus seisneb selles, et osuti s1 on nimega konstant, osuti s2 aga muutuja.

Stringikonstandid on ümbritsetud topeltjutumärkidega, erinevalt tähemärkidest, mis on ümbritsetud ühekordsete jutumärkidega. Näiteks,

"See on string."

Stringikonstandi pikkus ei tohi standardi järgi ületada 509 tähemärki. Paljud teostused võimaldavad aga pikemaid stringe.

Stringide lähtestamisel on parem mitte määrata massiivi dimensiooni, kompilaator loeb stringi pikkuse ja lisab sellele ühe. Näiteks,

char s1 = "See on string.";

Programmeerimiskeeles C on stringidega töötamiseks suur hulk funktsioone, mille prototüüpe kirjeldatakse päisefailides stdlib.h ja string.h. Nende funktsioonidega töötamist käsitletakse järgmistes lõikudes.

1.2. Liin sisend/väljund.

Stringi sisestamiseks konsoolist kasutage funktsiooni

char* gets(char*str);

mis kirjutab stringi aadressiks str ja tagastab sisendstringi aadressi. Funktsioon peatab sisestuse, kui see kohtab märki '\n' või EOF (faili lõpp). Reavahetusmärki ei kopeerita. Nullbait asetatakse lugemisrea lõppu. Edu korral tagastab funktsioon kursori lugemisreale ja ebaõnnestumise korral NULL.

Stringi konsooli väljastamiseks kasutage standardfunktsiooni

int paneb (const char *s);

mis tagastab mittenegatiivse arvu edu ja EOF ebaõnnestumise korral.

Hangi ja paneb funktsioonide prototüüpe kirjeldatakse päisefailis stdio.h.

#kaasa

printf("Sisendstring: ");

1.3. Vormindatud I/O.

Konsoolist vormindatud sisendi jaoks kasutage funktsiooni

int scanf (const char *vorming, ...);

mis tagastab edu korral loetud andmeühikute arvu ja ebaõnnestumise korral EOF-i. Vormingu parameeter peab osutama vormingustringile, mis sisaldab sisendvormingu spetsifikatsioone. Vormingutringile järgnevate argumentide arv ja tüübid peavad ühtima vormingustringis määratud sisendvormingute arvu ja tüüpidega. Kui see tingimus ei ole täidetud, on funktsiooni tulemus ettearvamatu.

Tühikud, tähemärgid "\t" või "\n" vormingustringis kirjeldavad üht või mitut tühja tähemärki sisendvoos, mis sisaldavad järgmisi märke: tühik, '\t', '\n', '\v', '\f'. Funktsioon scanf jätab sisendvoos nullmärgid vahele.

Literaalsed märgid vormingustringis, välja arvatud % märk, nõuavad täpselt samade märkide ilmumist sisendvoos. Kui sellist märki pole, peatab scanf sisendi. Funktsioon scanf jätab sõnasõnalised tähemärgid vahele.

Üldiselt on sisendvormingu spetsifikatsioon järgmine:

%[*] [laius] [muutjad] tüüp

Märk „*” tähistab lünka selle spetsifikatsiooniga määratletud välja sisestamisel;

- "laius" määrab selle spetsifikatsiooniga sisestatavate märkide maksimaalse arvu;

Tüüp võib võtta järgmisi väärtusi:

c on tähemärkide massiiv,

s – märgistring, stringid eraldatakse tühjade tähemärkidega,

d on märgiga täisarv kiirusel 10 s/s,

i on märgiga täisarv, numbrisüsteem põhineb kahel esimesel numbril,

u on märgita täisarv kiirusega 10 s/s,

o on märgita täisarv kiirusega 8 s/s,

x, X on märgita täisarv kiirusega 16 s/s,

e, E, f, g, G – ujuvarv,

p on kursor osutile,

n on täisarvu osuti,

[…] on skannitud märkide massiiv, näiteks .

Viimasel juhul sisestatakse sisendvoost ainult nurksulgudes olevad märgid. Kui esimene märk nurksulgudes on '^', sisestatakse ainult need märgid, mida massiiv ei sisalda. Massiivis olevate märkide vahemik määratakse märgiga "-". Tähemärkide sisestamisel sisestatakse ka eesmised tühjad märgid ja stringi lõpetav nullbait.

Modifikaatorid võivad võtta järgmisi väärtusi:

h on lühike täisarv,

l, L – pikk täisarv või ujuk,

ja neid kasutatakse ainult täisarvude või ujukite jaoks.

Järgmine näide näitab funktsiooni scanf kasutusjuhtumeid. Pange tähele, et vormingu määrajale eelneb enne ujuvarvu sisestamist tühik.

#kaasa

printf("Sisestage täisarv: ");

scanf("%d", &n);

printf("Sisesta topelt: ");

scanf(" %lf", &d);

printf("Sisestage täht: ");

scanf(" %c", &c);

printf("Sisesta string: ");

scanf("%s", &s);

Pange tähele, et selles programmis lähtestatakse ujukomaarv. Seda tehakse selleks, et kompilaator sisaldaks teeki, mis toetab ujuvate numbritega töötamist. Kui seda ei tehta, ilmneb ujuvarvu sisestamisel käitusajal tõrge.

Konsooli vormindatud väljundi jaoks kasutage funktsiooni

int printf (const char *formaat, ...);

mis tagastab õnnestumise korral väljundühikute arvu ja ebaõnnestumise korral EOF-i. Vormingu parameeter on vormingustring, mis sisaldab väljundvormingu spetsifikatsioone. Vormingutringile järgnevate argumentide arv ja tüübid peavad vastama vormingustringis antud väljundvormingu spetsifikatsioonide arvule ja tüüpidele. Üldiselt on väljundvormingu spetsifikatsioon järgmine:

%[lipud] [laius] [.täpsus] [muutjad] tüüp

- "lipud" on erinevad sümbolid, mis määravad väljundvormingu;

- "laius" määrab selle spetsifikatsiooniga väljastatavate märkide minimaalse arvu;

- ".precision" määrab maksimaalse väljastatavate märkide arvu;

- "muutjad" määravad argumentide tüübi;

- 'tüüp' määrab argumendi tüübi.

Märgiga täisarvude printimiseks kasutatakse järgmist väljundvormingut:

%[-] [+ | tühik] [laius] [l] d

- – joondus vasakule, vaikimisi – paremale;

+ - kuvatakse märk "+", pange tähele, et negatiivsete arvude puhul kuvatakse alati märk "-";

‘tühik’ – märgi asukohal kuvatakse tühik;

d on andmetüüp int.

Märgita täisarvude väljastamiseks kasutatakse järgmist väljundvormingut:

%[-] [#] [laius] [l]

# - kuvab 8 c/c numbrite puhul algset 0 või 16 c/c numbrite algust 0x või 0X,

l – pikk andmetüübi modifikaator;

u on täisarv vahemikus 10c/c,

o on täisarv väärtuses 8 c/c,

x, X on täisarv 16 c/c.

Ujukomanumbrite kuvamiseks kasutatakse järgmist väljundvormingut:

%[-] [+ | tühik] [laius] [.täpsus]

"täpsus" viitab f-, e- ja E-vormingus numbrite arvule pärast koma või g- ja G-vormingus oluliste numbrite arvule. Numbrid ümardatakse. Vaikimisi on kuue kümnendkoha täpsus;

f on fikseeritud punktiga arv,

e on eksponentsiaalses vormis arv, eksponenti tähistatakse tähega "e",

E on eksponentsiaalses vormis arv, eksponenti tähistatakse tähega "E",

g on f või g vormingutest lühim,

G on f- või G-vormingust lühim.

printf ("n = %d\n f = %f\n e = %e\n E = %E\n f = %.2f", -123, 12,34, 12,34, 12,34, 12,34);

// prindib: n = 123 f = 12,340000 e = 1,234000e+001 E = 1,234000E+001 f = 12,34

1.4. Stringi vormindamine.

Funktsioonide scanf ja printf on olemas variandid, mis on mõeldud stringide vormindamiseks ja mida nimetatakse vastavalt sscanf ja sprintf.

int sscanf (const char *str, const char *vorming, ...);

loeb andmeid str parameetriga määratud stringist vastavalt vorminguparameetriga määratud vormingustringile. Tagastab õnnestumise ja ebaõnnestumise korral loetud andmete hulga. Näiteks,

#kaasa

char str = "a 10 1,2 String Sisend puudub";

sscanf(str, "%c %d %lf %s", &c, &n, &d, s);

printf("%c\n", c); // prindib: a

printf("%d\n", n); // väljatrükke: 10

printf("%f\n", d); // väljatrükke: 1.200000

printf("%s\n", s); // prindib: String

int sprintf (char *puhver, const char *vorming, ...);

vormindab stringi vormingu parameetriga määratud vormingu järgi ja kirjutab tulemuse puhvri märgimassiivi. Funktsioon tagastab puhvri märgimassiivi kirjutatud märkide arvu, välja arvatud lõpetav nullbait. Näiteks,

#kaasa

char str = "c = %c, n = %d, d = %f, s = %s";

char s = "See on string.";

sprintf(puhver, str, c, n, d, s);

printf("%s\n", puhver); // prindib: c = c, n = 10, d = 1,200000, s = See on string

1.5. Teisendage stringid arvandmeteks.

Stringide arvandmeteks teisendamise funktsioonide prototüübid on toodud päisefailis stdlib.h, mis tuleb programmi kaasata.

Stringi täisarvuks teisendamiseks kasutage funktsiooni

int atoi (const char *str);

char *str = "-123";

n = atoi(str); // n = -123

Stringi pikaks täisarvuks teisendamiseks kasutage funktsiooni

pikk int atol (const char *str);

mis õnnestumise korral tagastab täisarvu, milleks string str teisendati, ja 0, kui see ei õnnestu. Näiteks

char *str = "-123";

n = atol(str); // n = -123

Stringi kahekordseks teisendamiseks kasutage funktsiooni

double atof (const char *str);

mis õnnestumise korral tagastab ujuvarvu double tüüpi, milleks string str teisendatakse ja ebaõnnestumise korral 0. Näiteks

char *str = "-123,321";

n = atof(str); // n = -123,321

Järgmised funktsioonid täidavad sarnaseid toiminguid nagu atoi, atol, atof, kuid pakuvad rohkem funktsioone.

long int strtol (const char *str, char **endptr, int base);

teisendab stringi stringi pikaks int-ks, mille ta tagastab. Selle funktsiooni parameetritel on järgmine eesmärk.

Kui baasargument on 0, sõltub teisendus str-i kahest esimesest tähemärgist:

Kui esimene märk on number 1 kuni 9, siis eeldatakse, et see arv on 10 c/c;

Kui esimene märk on arv 0 ja teine ​​märk on arv vahemikus 1 kuni 7, siis eeldatakse, et see arv on 8 c/c;

Kui esimene märk on 0 ja teine ​​märk on 'X' või 'x', siis eeldatakse, et see arv on esitatud 16 c/c.

Kui põhiargumendiks on arv vahemikus 2 kuni 36, võetakse see väärtus arvusüsteemi aluseks ja iga märk, mis läheb sellest süsteemist kaugemale, peatab teisenduse. Numbrisüsteemides alustega 11 kuni 36 kasutatakse numbrite tähistamiseks sümboleid "A" kuni "Z" või "a" kuni "z".

Endptr argumendi väärtuse määrab funktsioon strtol. See väärtus sisaldab kursorit tähemärgile, mis peatas str-i teisendamise. Funktsioon strtol tagastab õnnestumise korral teisendatud arvu ja ebaõnnestumise korral 0. Näiteks

n = strtol("12a", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 12, stop = a

n = strtol("012b", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 10, stop = b

n = strtol("0x12z", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 18, stop = z

n = strtol("01117", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 7, peatus = 7

märgita pikk int strtol (const char *str, char **endptr, int alus);

töötab sarnaselt funktsiooniga strtol, kuid teisendab arvu märgiesituse märgita pikaks int-iks.

double strtod (const char *str, char **endptr);

teisendab arvu sümboolse esituse kahekordseks.

Kõik selles lõigus loetletud funktsioonid peatavad oma töö, kui nad kohtavad esimest märki, mis ei sobi kõnealuse numbri vormingusse.

Lisaks, kui numbri märgi väärtus ületab vastava andmetüübi lubatud väärtuste vahemikku, seavad funktsioonid atof, strtol, strtoul, strtod muutuja errno väärtuseks ERANGE. Muutuja errno ja konstant ERANGE on määratletud päisefailis math.h. Funktsioonid atof ja strtod tagastavad HUGE_VAL, funktsioon strtol tagastab LONG_MAX või LONG_MIN ja funktsioon strtoul ULONG_MAX.

Mittestandardseid funktsioone itoa, ltoa, utoa, ecvt, fcvt ja gcvt saab kasutada arvandmete teisendamiseks märgistringideks. Kuid nendel eesmärkidel on parem kasutada standardset sprintf-funktsiooni.

1.6. Standardfunktsioonid stringidega töötamiseks.

Selles jaotises käsitletakse stringidega töötamise funktsioone, mille prototüüpe kirjeldatakse päisefailis string.h.

1. Stringi võrdlus. Stringide võrdlemiseks kasutatakse strcmp ja strncmp funktsioone.

int strcmp (const char *str1, const char *str2);

võrdleb stringe str1, str2 leksikograafiliselt ja tagastab -1, 0 või 1, kui str1 on vastavalt väiksem, võrdne või suurem kui str2.

int strncmp (const char *str1, const char *str2, size_t n);

võrdleb leksikograafiliselt maksimaalselt str1 ja str2 esimest n märki. Funktsioon tagastab väärtuse -1, 0 või 1, kui str1 esimest n märki on vastavalt väiksemad, võrdsed või suuremad kui str2 esimesed n tähemärki.

// stringi võrdlusnäide

#kaasa

#kaasa

char str1 = "aa bb";

char str2 = "aa aa";

char str3 = "aa bb cc";

printf("%d\n", strcmp(str1, str3)); // prindib: -1

printf("%d\n", strcmp(str1, str1)); // prindib: -0

printf("%d\n", strcmp(str1, str2)); // prindib: 1

printf("%d\n", strncmp(str1, str3, 5)); // prindib: 0

2. Ridade kopeerimine. Strcpy ja strncpy funktsioone kasutatakse stringide kopeerimiseks.

char *strcpy (char *str1, const char *str2);

kopeerib stringi str2 stringi str1. String str2 kopeeritakse tervikuna, kaasa arvatud lõpetav nullbait. Funktsioon tagastab kursori str1-le. Kui jooned kattuvad, on tulemus ettearvamatu.

char *strncpy (char *str1, const char *str2, suurus_t n);

kopeerib n tähemärki stringist str2 stringi str1. Kui string str2 sisaldab vähem kui n tähemärki, kopeeritakse viimane nullbait nii palju kordi, kui on vaja stringi str2 laiendamiseks n märgini. Funktsioon tagastab osuti stringile str1.

char str2 = "Kopeeri string.";

strcpy(str1, str2);

printf(str1); // prindib: kopeeri string.

4. Ühendusnöörid. Strcat ja strncat funktsioone kasutatakse stringide ühendamiseks üheks stringiks.

char* strcat (char *str1, const char *str2);

lisab stringile str1 stringi str2, kusjuures stringi str1 lõpetav nullbait kustutatakse. Funktsioon tagastab osuti stringile str1.

char* strncat (char *str1, const char *str2, suurus_t n);

ühendab n tähemärki stringist str2 stringi str1, kustutades str1 lõpu nullbaidi. Funktsioon tagastab osuti stringile str1. kui stringi str2 pikkus on väiksem kui n, siis lisatakse ainult stringis str2 sisalduvad märgid. Pärast stringi ühendamist lisatakse str1-le alati nullbait. Funktsioon tagastab osuti stringile str1.

#kaasa

#kaasa

char str1 = "string";

char str2 = "katenatsioon";

char str3 = "Jah Ei";

strcat(str1, str2);

printf("%s\n", str1); // prindib: String catenation

strncat(str1, str3, 3);

printf("%s\n", str1); // prindib: String catenation Jah

5. Otsige stringist märki. Funktsioone strchr, strrchr, strspn, strcspn ja strpbrk kasutatakse stringist märgi otsimiseks.

char* strchr (const char *str, int c);

otsib stringist str parameetriga c määratud märgi esimest esinemist. Edu korral tagastab funktsioon kursori esimesele leitud märgile ja ebaõnnestumise korral NULL.

char* strrchr (const char *str, int c);

otsib stringis stringis parameetriga c määratud märgi viimast esinemist. Edu korral tagastab funktsioon kursori viimati leitud märgile ja ebaõnnestumise korral NULL.

#kaasa

#kaasa

char str = "täheotsing";

printf("%s\n", strchr(str, "r")); // prindib: r otsing

printf("%s\n", strrchr(str, "r")); // prindib: rch

suurus_t strspn (const char *str1, const char *str2);

tagastab str1 esimese märgi indeksi, mida str2-s ei ole.

suurus_t strcspn (const char *str1, const char *str2);

tagastab str1 esimese märgi indeksi, mis on str2-s.

char str = "123 abc";

printf("n = %d\n", strspn(str, "321"); // prindib: n = 3

printf ("n = %d\n", strcspn (str, "cba"); // prindib: n = 4

char* strpbrk (const char *str1, const char *str2);

leiab str1 esimese märgi, mis võrdub ühe tähemärgiga str2-s. Edu korral tagastab funktsioon kursori sellele märgile ja ebaõnnestumise korral NULL.

char str = "123 abc";

printf("%s\n", strpbrk(str, "bca")); // prindib: abc

6. Stringide võrdlus. Stringide võrdlemiseks kasutatakse funktsiooni strstr.

char* strstr (const char *str1, const char *str2);

leiab stringi str2 esimese esinemiskoha (ilma lõpu nullbaidita) stringis str1. Edu korral tagastab funktsioon kursori leitud alamstringile ja ebaõnnestumise korral NULL. Kui str1 osuti osutab nullpikkusele stringile, tagastab funktsioon str1 osuti.

char str = "123 abc 456;

printf("%s\n", strstr(str, "abc"); // print: abc 456

7. Stringi parsimine märkideks. Strtok funktsiooni kasutatakse stringi märkideks sõelumiseks.

char* strtok (char *str1, const char *str2);

tagastab kursori stringis str1 järgmisele märgile (sõnale), kus märgi eraldajad on stringi str2 märgid. Kui märgid on möödas, tagastab funktsioon NULL. Funktsiooni strtok esimesel väljakutsel peab parameeter str1 osutama stringile, mis sõelutakse žetoonidena, ja järgmistel kõnedel tuleb selle parameetri väärtuseks määrata NULL. Pärast märgi leidmist kirjutab funktsioon strtok selle märgi järele eraldaja asemel nullbaidi.

#kaasa

#kaasa

char str = "12 34 ab cd";

p = strtok(str, " ");

printf("%s\n",p); // prindib väärtused veerus: 12 34 ab cd

p = strtok(NULL, " ");

8. Stringi pikkuse määramine. Strlen funktsiooni kasutatakse stringi pikkuse määramiseks.

suurus_t strlen(const char *str);

tagastab stringi pikkuse, ignoreerides viimast nullbaiti. Näiteks,

char str = "123";

printf("len = %d\n",strlen(str)); // prindib: len = 3

1.7. Funktsioonid mäluga töötamiseks.

Päisefailis string.h on kirjeldatud ka mäluplokkidega töötamise funktsioone, mis on sarnased vastavate stringidega töötamise funktsioonidega.

void* memchr(const void *str, int c, suurus_t n);

otsib c-ga määratud märgi esimest esinemist str n baidist.

int memcmp(const void *str1, const void *str2, suurus_t n);

võrdleb stringide str1 ja str2 esimest n baiti.

void* memcpy(const void *str1, const void *str2, suurus_t n);

kopeerib esimesed n baiti stringist str1 stringi str2.

void* memmove(const void *str1, const void *str2, suurus_t n);

kopeerib esimesed n baiti str1-st str2-sse, tagades, et kattuvaid stringe käsitletakse õigesti.

void* memset(const void *str, int c, suurus_t n);

kopeerib c-ga määratud märgi str-i esimesse n baiti.

Kaasaegne C++ standard defineerib stringidega töö korraldamiseks funktsioonide ja omadustega (muutujatega) klassi (klassikalises C-keeles stringe kui selliseid pole, on ainult tähemassiivid):

#kaasa

#kaasa

#kaasa

Stringidega töötamiseks peate lisama ka standardse nimeruumi:

Nimeruumi kasutamine std;

Vastasel juhul peate igal pool stringi asemel määrama klassi deskriptori std::string.

Järgmine on näide programmist, mis töötab stringiga (ei tööta vanades C-ühilduvates kompilaatorites!):

#kaasa #kaasa #kaasa kasutades nimeruumi std; int main() (string s = "Test"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->erase(s2->end()); cout<< s2->c_str(); cin.get(); tagasi 0; )

Stringiklassi peamised omadused:

  • initsialiseerimine märkide massiiviga (sisseehitatud string) või muu string tüüpi objektiga. Sisseehitatud tüübil pole teist võimalust;
  • ühe rea teise kopeerimine. Sisseehitatud tüübi jaoks peate kasutama funktsiooni strcpy();
  • juurdepääs stringi üksikutele tähemärkidele lugemiseks ja kirjutamiseks. Sisseehitatud massiivi puhul kasutatakse seda indeksioperatsiooni või kaudse adresseerimise abil kursori abil;
  • kahe stringi võrdlemine võrdsuse jaoks. Sisseehitatud tüübi puhul kasutatakse strcmp() perekonna funktsioone;
  • kahe stringi ühendamine (konkateneerimine), andes tulemuse kas kolmanda stringina või ühe algse stringina. Sisseehitatud tüübi puhul kasutatakse funktsiooni strcat(), kuid tulemuse saamiseks uuele reale tuleb kasutada järjestuses funktsioone strcpy() ja strcat() ning hoolitseda ka mälu eraldamise eest;
  • sisseehitatud vahendid stringi pikkuse määramiseks (klassi suurus() ja l ength() liikmefunktsioonid. Ainus viis sisseehitatud tüüpi stringi pikkust teada saada on selle arvutamine funktsiooniga strlen();
  • võimalus teada saada, kas string on tühi.

Vaatame neid põhifunktsioone lähemalt.

Stringi lähtestamine kirjeldamisel ja nööri pikkus(välja arvatud lõpetav nullterminaator):

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

String võib olla ka tühi:

String st2;

Et kontrollida, kas kas string on tühi, saate selle pikkust võrrelda 0-ga:

if (!st.size()) // tühi

või kasutage meetodit empty(), mis tagastab tühja stringi puhul tõene ja mittetühja stringi puhul false:

if (st.empty()) // tühi

Kolmas stringi loomise vorm initsialiseerib stringi tüüpi objekti teise sama tüüpi objektiga:

String st3(st);

String st3 initsialiseeritakse stringiga st . Kuidas saame tagada, et need stringid sobivad? Kasutame võrdlusoperaatorit (==):

Kui (st == st3) // lähtestamine õnnestus

Kuidas kopeerida üks rida teisele? Tavalise määramisoperaatoriga:

st2 = st3; // kopeeri st3 st2

Sest stringide ühendamine kasutatakse liitmisoperaatorit (+) või liitmise-määramise operaatorit (+=). Olgu antud kaks rida:

String s1("tere, "); string s2("maailm\n");

Saame kolmanda stringi, mis koosneb kahe esimese konkatenatsioonist, seega:

String s3 = s1 + s2;

Kui tahame s1 lõppu lisada s2, peame kirjutama:

S1 += s2;

Liitmisoperatsioon võib klassiobjekte liita string mitte ainult omavahel, vaid ka sisseehitatud tüüpi stringidega. Saate ülaltoodud näite ümber kirjutada nii, et erimärke ja kirjavahemärke esindab sisseehitatud tüüp char * ja olulisi sõnu klassistringi objektid:

Const char *pc = ", "; string s1("tere"); string s2("maailm"); string s3 = s1 + pc + s2 + "\n"; cout<< endl << s3;

Sellised avaldised töötavad, kuna kompilaator "teab", kuidas automaatselt teisendada sisseehitatud tüüpi objekte klassistringi objektideks. Samuti on võimalik stringiobjektile lihtsalt sisseehitatud string määrata:

String s1; const char *pc = "märkide massiiv"; s1=pc; // Õige

Vastupidine teisendus on ei tööta. Järgmise sisseehitatud tüüpi stringi lähtestamise katse põhjustab kompileerimisvea:

Char*str = s1; // koostamise viga

Selle teisenduse tegemiseks peate selgelt kutsuma liikmefunktsiooni nimega c_str() ("C string"):

Const char *str = s1.c_str();

Funktsioon c_str() tagastab kursori märgimassiivile, mis sisaldab stringiobjekti stringi, nagu see oleks sisseehitatud stringitüübi puhul. Märksõna const takistab tänapäevastes visuaalsetes keskkondades "ohtlikku" võimalust objekti sisu otse kursori abil muuta.

TO üksikud tegelased tüübiga string objektile, nagu ka sisseehitatud tüübile, pääseb juurde indeksoperatsiooni abil. Näiteks siin on koodilõik, mis asendab kõik punktid allkriipsudega:

String str("www.disney.com"); int suurus = str.size(); jaoks (int i = 0; i< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Asenda(str.begin(), str.end(), ".", "_");

Tõsi, siin ei kasutata mitte stringiklassi asendusmeetodit, vaid samanimelist algoritmi:

#kaasa

Kuna stringobjekt käitub nagu konteiner, saab sellele rakendada muid algoritme. See võimaldab lahendada probleeme, mida stringiklassi funktsioonid otseselt ei lahenda.

Allpool on lühikirjeldus stringiklassi peamistest operaatoritest ja funktsioonidest, tabelis olevad lingid viivad venekeelsete kirjeldusteni Internetis. Stringiklassi võimaluste täielikuma loetelu leiate näiteks Wikipediast või cplusplus.com-ist.

Tähemärkide määramine stringis

operaator=

määrab stringile väärtused

määrama

määrab stringile märgid

Juurdepääs üksikutele tegelastele

juures

määratud märgi hankimine koos indeksi kontrollimisega piiridest väljas

operaator

määratud tähemärgi saamine

ees

esimese tegelase saamine

tagasi

viimase tegelase saamine

andmeid

tagastab kursori stringi esimesele märgile

c_str

naaseb muutmatu C-märkide massiiv, mis sisaldab stringi märke

Stringi mahu kontrollimine

tühi

kontrollib, kas string on tühi

suurus
pikkus

tagastab märkide arvu stringis

max_size

tagastab maksimaalse märkide arvu

reserv

reserveerib hoiuruumi

Tehted stringil

selge

tühjendab stringi sisu

sisestada

märgi sisestamine

kustutada

tegelase eemaldamine

lükka tagasi

tähemärgi lisamine stringi lõppu

pop_back

eemaldab viimase tähemärgi

lisama

operaator+=

lisab tähemärgid stringi lõppu

võrdlema

võrdleb kahte stringi

asendada

asendab määratud märgi iga esinemise

alamstr

tagastab alamstringi

kopeerida

kopeerib tegelasi

suurust muutma

muudab salvestatud märkide arvu

Stringideklaratsioonid

String C-keeles on ühemõõtmeline märkide massiiv, mille viimane element on rea lõpu märk - null (null-lõpuline string, see tähendab NULL-lõpuga string).

String-tüüpi muutuja C-s deklareerimiseks on kolm võimalust, millest kaks initsialiseerivad stringi deklareerimise ajal.

Esimene viis:

Märgimassiivi deklaratsioonid (ärge unustage lõpetava nulli jaoks tühikut lisada):

Tähed;

Teine viis:

Määrake stringi muutujale algväärtus (sel juhul saab kompilaator stringi pikkuse ise arvutada):

Char s = "Stringi lähtestamise näide";

Määramismärgist paremal on stringi konstant. Stringi lõppu lisatakse automaatselt null ('\0'). Märgistringi konstandid paigutatakse staatilisse salvestusklassi.

Kolmas viis:

Kaudne märge, et massiivi kasutatakse. Määramismärgi vasakul küljel on kursor sümbolile:

Char *s="Teine lähtestamise valik";

Muutuja s osutab RAM-i asukohale, kus stringikonstant asub. Sellel tähistusvormil on potentsiaalne viga, kuna märgile osutavat osutit nimetatakse sageli stringiks. Allolev kirje on lihtsalt kursor märgile, kuna stringi jaoks pole ruumi:

Char*s;

Stringi sisestamine standardsest sisendseadmest (klaviatuurist)

Stringidega töötamiseks on funktsioonide komplekt. Tavalisest sisendseadmest (klaviatuurist) sisestamiseks kasutatakse kõige sagedamini standardse sisend-/väljundmooduli raamatukogu funktsioone: scanf Ja saab.

Stringi sisestamiseks funktsiooni abil scanf, kasutab vormingut « %s» , ja pange tähele, et aadressimärki ei kasutata enne rea identifikaatorit « & » , kuna ühemõõtmelist massiivi kujutab juba kursor selle algusesse:

scanf("%s", s);

Funktsioon saab () loeb märke, kuni jõuab reavahetuseni. Funktsioon aktsepteerib kõiki märke kuni reavahetuse märgini, kuid mitte. Stringi lõppu lisatakse lõpetav null ('\0'). Funktsioon saab () paneb klaviatuurilt loetud tähemärkide jada stringiparameetrisse ja tagastab kursori sellele stringile (kui toiming oli edukas) või NULL (vea korral). Allolevas näites kuvatakse pärast toimingu edukat lõpetamist ekraanil kaks identset rida:

#kaasa int main() ( char s; char *p; p=gets(s); printf(" \n String %s on sisestatud. ",s); if (p) printf(" \n String %s on sisestatud. ", p); tagasta 0;)

Möödaminnes märgime, et funktsiooni gets kasutatakse sageli klaviatuurilt mis tahes andmete sisestamiseks stringina, et sscanf-funktsiooni edasiseks teisendamiseks soovitud vormingusse või sisendandmete eelanalüüsiks, näiteks:

#kaasa #kaasa #kaasa int main() ( char s; int x, err; do ( printf(" \n Sisesta täisarv -> "); gets(s); err=sscanf(s, "%d",&x); if (err !=1) printf(" \n Sisestusviga. "); ) while (err!=1); printf("\n Sisestati täisarv -> %d", x); return 0; )

Stringide printimine standardväljundisse (monitori ekraan)

Stringide väljastamiseks standardväljundisse (monitoriekraan) saate kasutada kahte funktsiooni printf Ja paneb. Funktsioonis printf edastatakse vorminguks "%s". Selle funktsiooni kasutamise mugavus seisneb selles, et lisaks stringile saate kohe kuvada ka muud tüüpi andmeid. funktsiooni funktsioon paneb on see, et pärast rea väljastamist toimub automaatselt üleminek järgmisele reale.

Stringi funktsioonid

Stringide teisendamiseks C-keeles on stringiteek. Igal funktsioonil on oma salvestusvorming (prototüüp).

Selles artiklis käsitletakse enim kasutatud funktsioone. - lugeda

Stringidega töötavate programmide (loetelu) näide

34

--- C# õpetus --- Stringid

Tavalise programmeerimise osas 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 üks viitetüüpidest.

Rea ehitus

Lihtsaim viis märgistringi konstrueerimiseks on kasutada stringiliteraali. Näiteks järgmises koodireas omistatakse stringi viitemuutujale str viide stringiliteraalile:

String str = "Näidiste string";

Sel juhul initsialiseeritakse muutuja str märgijadaga "Example 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 stringi tüüpi objekt on loodud, saab seda kasutada kõikjal, kus on vaja tsiteeritud teksti stringi.

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 esmapilgul ilmne puudus tegelikult eeliseks. Seega, kui vajate stringi olemasoleva stringi variatsioonina, peaksite selleks looma uue stringi, mis sisaldab kõiki vajalikke muudatusi. Ja kuna kasutamata stringobjektid kogutakse automaatselt "prügisse", siis ei pea te isegi muretsema mittevajalike stringide saatuse pärast.

Siiski tuleb rõhutada, et stringi viitemuutujad (st stringi tüüpi objektid) võivad muutuda ja seetõttu võivad nad viidata teisele objektile. Kuid stringobjekti enda sisu ei muutu pärast selle loomist.

Kaaluge 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 mitut kõnet opkoodile ldstr (stringi koormus). See ldstr opkood CIL-is põhjustab uue stringiobjekti laadimise hallatavasse hunnikusse. 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.

String-klassi väli, indekseerija ja omadus

Klassil String on määratletud üks väli:

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ääratud indeksiga märgi. Stringide indekseerimine, nagu massiivid, 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 märkide arvu stringis. Allolev näide näitab indekseerija ja atribuudi Length kasutamist:

Süsteemi kasutamine; class Näide ( static void Main() ( string str = "Lihtne string"; // Stringi pikkuse ja stringi kuuenda märgi hankimine indekseerijaga Console.WriteLine("Stringi pikkus on (0), 6. märk on "(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 ==, kontrollib see tavaliselt, kas mõlemad viited on samale objektile. Ja kui operaatorit == rakendatakse objektiviidetele, mis on tüüpi String, võrreldakse stringide endi sisu võrdsuse tagamiseks. Sama kehtib ka operaatori != kohta. Kui seda rakendatakse String tüüpi objektiviidetele, võrreldakse stringide endi sisu ebavõrdsuse suhtes. Samal ajal võrdlevad teised relatsioonioperaatorid, sealhulgas =, viiteid String-tüüpi objektidele samamoodi nagu muud tüüpi objektidele. Ja selleks, et kontrollida, kas üks string on teisest suurem, tuleks kutsuda String klassis määratletud meetod Compare().

Nagu hiljem selgub, kasutavad mitmesugused märgistringide võrdlused kultuuriteavet. Kuid see ei kehti == ja != operaatorite kohta. Lõppude lõpuks võrdlevad nad lihtsalt märkide järjekorraväärtusi stringides. (Teisisõnu, nad võrdlevad kahendmärkide väärtusi, mida kultuurinormid ei ole muutnud, st lokaate.) Seetõttu teostavad need operaatorid stringide võrdlusi tõstu- ja kultuuri mittetundlikul viisil.

Stringiklassi meetodid

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

Stringi meetodid
meetod Struktuur ja ülekoormatud versioonid Eesmärk
Stringide võrdlus
Võrdlema() 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, kui strA on suurem kui strB; negatiivne, kui strA on väiksem kui strB; ja null, kui stringid strA ja strB on võrdsed. Võrdlus on tõstutundlik ja kultuuritundlik.

Kui parameeter ignoreCase on seatud tõeväärtuseks true, siis võrdluses ei võeta 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 strA-st on suurem kui osa strB-st; negatiivne väärtus, kui osa strA-st on väiksem kui osa strB-st; ja null, kui stringide strA ja strB võrreldavad osad on võrdsed. Võrdlus on tõstutundlik ja kultuuritundlik.

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 arvestamata kohalike sätetega

Võrdlema() 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 väärtus, kui kutsuv string on väärtusestringist väiksem; ja null, kui võrreldavad stringid on võrdsed

public int Võrdle(string strB)

Võrdleb kutsuvat stringi strB-ga

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. Sooritab järguvõrdluse, tõstutundlik, kuid kultuuriliselt tundetu

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, tõstutundlik, kuid kultuuriliselt tundetu. 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, tõstutundlik, kuid kultuuriliselt tundetu. 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 eraldi 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 väärtusega alamstring. Vastasel juhul tagastatakse tõeväärtus false. Parameeter võrdlusType määrab, kuidas otsing tehakse.

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 väärtusega alamstring. Vastasel juhul tagastab see tõeväärtuse false. Parameeter võrdlusType määratleb konkreetse otsingumeetodi

Indeks() 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 -1.

public int IndexOf(char value, int startIndex)

Avalik 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 indeksis startIndex määratud elemendist ja hõlmab loendusparameetriga 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 esimese asemel

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 indeksi startIndex määratud elemendist ja hõlmab loendusparameetriga määratud elementide arvu (kui see on olemas). Meetod tagastab -1, kui massiivi anyOf ühegi märgi jaoks ei leita vastet. Läbiotsimine toimub tavalisel viisil

LastIndexOfAny Ülekoormatud versioonid on sarnased meetodiga IndexOfAny().

Tagastab kutsuvast stringist leitud anyOf massiivi mis tahes märgi viimase esinemise indeksi

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 hangitud 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() kaks esimest vormi jagavad kutsuva stringi osadeks ja tagastavad massiivi, 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 ridade arv, mis on piiratud loendusparameetriga.

Kuid kõigil vormidel määrab suvandite parameeter konkreetse viisi tühjade stringide käsitlemiseks, mis genereeritakse siis, kui kaks eraldajat on kõrvuti. Loend StringSplitOptions määratleb ainult kaks väärtust. Mitte ühtegi Ja Eemalda EmptyEntries. Kui suvandite parameeter on None, kaasatakse algse stringi poolitamise lõpptulemusse tühjad stringid. Ja kui suvandite parameeter on seatud väärtusele RemoveEmptyEntries, jäetakse tühjad stringid algse stringi tükeldamise 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 arvu loenditega, alustades väärtusmassiivi elemendist. Mõlemal kujul eraldatakse iga järgmine rida eelmisest reast eraldaja parameetriga määratud eraldusstringiga.

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

Avalik string Trim (params char trimChars)

Meetod, mis võimaldab eemaldada kõik määratud märgikomplekti esinemised praeguse stringi algusest ja lõpust.

Meetodi Trim() esimene vorm eemaldab kutsuvast stringist ees- ja lõputühikud. Ja selle meetodi teine ​​vorm eemaldab trimCharsi massiivist esile kutsuva tähemä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 teil täita stringi vasakpoolsete tähemärkidega.

Meetodi PadLeft() esimene vorm lisab tühikud helistajastringi vasakule küljele, nii et selle kogupikkus võrdub parameetri totalWidth väärtusega. Selle meetodi teises vormis sisestatakse parameetriga paddingChar tähistatud märgid kutsuva stringi vasakule poole, 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() Sarnane PadLeft()

Võimaldab stringi polsterdada paremal asuvate tähemärkidega.

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

Kasutatakse ühe stringi sisestamiseks teise, kus väärtus on string, mis sisestatakse kutsuvasse stringi indeksi startIndexi juures. 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 eemaldatakse, alustades indeksi startIndexi määratud asukohast ja jätkates stringi lõpuni. Ja selle meetodi teisel kujul eemaldatakse stringist loendusparameetriga määratud märkide arv, alustades startIndexi indeksi määratud kohast.

Asenda () avalik string Asenda (tähemärk oldChar, char new Char)

Avalik string Asenda (string oldValue, string newValue)

Kasutatakse stringi osa asendamiseks. Meetodi Asenda() esimene vorm asendab kõik väljakutsumise stringis esinevad oldChar tüübiga newChar. Ja selle meetodi teises vormis asendatakse kõik stringi oldValue esinemised kutsuvas stringis stringiga newValue.

Juhtumi vahetus
ToUpper() avalik string ToUpper()

Suurendab kõik kutsungi tähed.

To Lower() avalik string ToLower()

Muudab kõik kutsuvstringi tähed väiketähtedeks.

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

Avalik string Alamstring (int algusindeks, sisemine pikkus)

Meetodi Substring() esimeses vormis ekstraheeritakse alamstring parameetri startIndex näidatud asukohast kuni kutsuva stringi lõpuni. Ja selle meetodi teises vormis ekstraheeritakse alamstring, mis koosneb pikkusparameetriga määratud arvust tähemärkidest, alustades parameetri startIndex näidatud kohast.

Järgmises programminäites kasutatakse mitut ülaltoodud meetoditest.

Süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.Linq; kasutades System.Text; nimeruum ConsoleApplication1 ( klass Program ( staatiline void Main(string args) ( // Võrdle kahte esimest stringi string s1 = "see on string"; string s2 = "see on tekst, 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"); // Stringi ühendamine Console.WriteLine(String.Concat("\n" + "One, two ","three, four")); // Otsi stringist // Esimene esinemine of substring if (s2. IndexOf("this") != -1) Console.WriteLine("Realt leiti sõna \"this\", see on "+ "at: (0) positsioonil", s2. IndexOf("this")); / / Alamstringi viimane esinemine if (s2.LastIndexOf("this") != -1) Console.WriteLine("Selle \"viimane esinemine\" on " + "kohal ( 0) position", s2.LastIndexOf("this" )); // Otsige tähemärkide massiivist char myCh = ("S","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 string 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"); else if (myOS.Contains("NT 6.1")) Console.WriteLine("Teie operatsioonisüsteem on Windows 7"); Console.ReadLine(); ) ) )

Natuke stringide võrdlusest C#-s

Kõigist märgistringi töötlemistoimingutest on see tõenäoliselt kõige sagedamini teostatav ühe stringi võrdlemine teisega. Enne stringide võrdlusmeetodite vaatamist tuleks rõhutada järgmist: stringide võrdlemist saab .NET Frameworkis teha peamiselt kahel viisil.

    Esiteks võib võrdlus kajastada konkreetse kultuurikeskkonna tavasid ja norme, mis on sageli kultuurilised seaded, mis jõustuvad programmi täitmisel. See on mõne, kuigi mitte kõigi võrdlusmeetodite standardkäitumine.

    Ja teiseks saab võrdlust teostada sõltumata kultuurikeskkonna seadistustest ainult stringi moodustavate tegelaste järguväärtuste põhjal. Üldiselt kasutab stringide kultuuriliselt mittetundlik võrdlemine leksikograafilist järjekorda (ja keelelisi tunnuseid), et teha kindlaks, kas üks string on suurem, väiksem või võrdne teisest stringist. Järkjärgulises võrdluses järjestatakse stringid lihtsalt iga tähemärgi muutmata väärtuse alusel.

Kultuuride ja järguliste võrdluste stringide võrdlemise ja iga sellise võrdluse mõju tõttu soovitame tungivalt kasutada Microsofti praegu pakutavaid parimaid tavasid. Lõppkokkuvõttes võib stringide võrdlemiseks vale meetodi valimine kaasa tuua programmi ebaõige 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 kultuuriliselt tundliku stringivõrdluse, kui selle eesmärk on kasutajale tulemuse kuvamine (näiteks leksikograafilises järjekorras sorteeritud stringide seeria kuvamiseks). Kui aga stringid sisaldavad fikseeritud teavet, mida ei ole ette nähtud kultuuriliste erinevuste jaoks muutmiseks, nagu failinimi, märksõna, veebisaidi aadress või turvalisusega seotud väärtus, peaksite valima järgulise stringi võrdluse. Loomulikult määravad konkreetse arendatava rakenduse eripärad märgistringide võrdlemiseks sobiva viisi valiku.

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

Need meetodi Compare() ülekoormused, mis ei sisalda StringComparisoni tüüpi parameetrit, viivad läbi märgistringide tõstu- ja kultuuritundliku võrdluse. Ja nendes ülekoormatud variantides, mis ei sisalda CultureInfo tüüpi parameetrit, määrab kultuuriteabe praegune käituskeskkond.

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

Kultuuritundlike stringide võ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õrdlemine toimub praeguste kultuuriseadete abil
CurrentCultureIgnoreCase Stringide võrdlemisel kasutatakse praeguseid kultuurisätteid, kuid see ei ole tõstutundlik
Muutmatu kultuur Stringide võrdlemisel kasutatakse muutumatuid, st. universaalsed andmed kultuurikeskkonna kohta
InvariantCultureIgnoreCase Stringide võrdlemisel kasutatakse muutumatuid, st. universaalsed kultuuriandmed ja tõstutundlikud
Tavaline Stringide võrdlemisel kasutatakse stringis olevate märkide järjekorraväärtusi. Sel juhul võidakse rikkuda leksikograafilist järjekorda ja eiratakse konkreetses kultuurikeskkonnas omaks võetud konventsioone.
OrdinalIgnoreCase Stringide võrdlemisel kasutatakse stringis olevate märkide järguväärtusi, kuid tõstutundlikud

Mõlemal juhul tagastab meetod Compare() negatiivse väärtuse, kui esimene võrreldav string on teisest väiksem; positiivne väärtus, 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. Näiteks kui stringe võrreldakse kultuuriliselt, võivad mõlemad stringid oma sortimisjärjekorras olla samad, kuid mitte sisuliselt võrdsed. Vaikimisi määratakse stringide võrdsus meetodi Equals() abil, mis põhineb märkide järguväärtustel, mitte kultuuriliselt. 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 lihtsaks järguliseks võrdlemiseks lihtsam kasutada CompareOrdinal() meetodit. Lõpuks pidage meeles, et CompareTo() meetod võrdleb stringe ainult kultuuriliselt tundlikul viisil.

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 ingliskeelsete järgarvude võrdluste vahel:

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; / / Esiteks demonstreerige erinevusi kultuuritundliku stringide võrdluse ja järgu võrdlemise tulemuse vahel = String.Compare(str1, str2, StringComparison.CurrentCulture); Console.Write("Kultuuritundlik stringide võrdlus: "); if (tulemus 0 ) Console .WriteLine(str1 + " on suurem kui " + str2); else Console.WriteLine(str1 + "on " + str2); result = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write("Järjekordade võrdlus read: "); if (tulemus 0) Console.WriteLine(str1 + " on suurem kui " + str2); else Console.WriteLine(str1 + "on võrdne " + str4); // Kasutage meetodi CompareOrdinal() tulemust = String.CompareOrdinal( str1, str2); Console.Write("Võrdle stringe kasutades CompareOrdinal():\n"); if (tulemus 0) Console.WriteLine(str1 + " on suurem kui " + str2); else Console. WriteLine(str1 + "on võrdne " +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 tuvastamine operaatori != abil if(str1 != str3) Console.WriteLine(str1 + " != " + str3); if(str1 != str2) Console.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Tehke järgu tõstetundlik stringide võrdlus, kasutades meetodit Equals() if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Stringide võrdlemine Equals() meetodi abil parameetriga 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("Stringide võrdlemine praeguse kultuuri alusel:" + "\n3 esimest tähemärki stringi " + str2 + " on suurem kui stringi " + str5" esimesed 3 tähemärki; ) ) )

Selle programmi käivitamine annab järgmise tulemuse: