34

--- C# útmutató --- Húrok

A rendszeres programozás szempontjából string karakterlánc adattípus az egyik legfontosabb a C#-ban. Ez a típus karakterláncokat határoz meg és támogatja. Számos más programozási nyelvben a karakterlánc karakterek tömbje. A C#-ban pedig a karakterláncok objektumok. Ezért a karakterlánc típusa az egyik referenciatípus.

Sorépítés

A karakterlánc létrehozásának legegyszerűbb módja egy string literál használata. Például a következő kódsorban az str karakterlánc hivatkozási változóhoz egy karakterlánc-literálhoz van rendelve:

String str = "Példakarakterlánc";

Ebben az esetben az str változó az "Example String" karaktersorozattal inicializálódik. Egy string típusú objektum char típusú tömbből is létrehozható. Például:

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

A string típusú objektum létrehozása után bárhol használható, ahol idézett szövegre van szükség.

A húr kitartása

Furcsa módon egy string típusú objektum tartalma nem módosítható. Ez azt jelenti, hogy a karaktersorozat létrehozása után nem módosítható. Ez a korlátozás azonban hozzájárul a karakterláncok hatékonyabb megvalósításához. Ezért ez az első pillantásra nyilvánvaló hátrány valójában előnnyé válik. Tehát, ha szüksége van egy karakterláncra egy meglévő karakterlánc variációjaként, akkor erre a célra hozzon létre egy új karakterláncot, amely tartalmazza az összes szükséges változtatást. És mivel a fel nem használt karakterlánc-objektumok automatikusan a "szemétbe" kerülnek, így nem is kell aggódnia a felesleges karakterláncok sorsa miatt.

Hangsúlyozni kell azonban, hogy a string hivatkozási változók (vagyis a string típusú objektumok) változhatnak, ezért hivatkozhatnak egy másik objektumra. De magának a karakterlánc objektumnak a tartalma nem változik a létrehozása után.

Vegyünk egy példát:

Static void addNewString() ( string s = "Ez az én körvonalam"; s = "Ez az új vonás"; )

Fordítsuk le az alkalmazást, és töltsük be a kapott összeállítást az ildasm.exe segédprogramba. Az ábra a void addNewString() metódushoz generált CIL kódot mutatja:

Figyelje meg az ldstr (karakterláncterhelés) műveleti kód többszöri hívását. Ez az ldstr műveleti kód a CIL-ben egy új karakterlánc objektum betöltését okozza a felügyelt kupacban. Ennek eredményeként az előző objektum, amely az "Ez az én vonásom" értéket tartalmazta, végül összegyűjti a szemetet.

Munka húrokkal

Osztályban System.String metódusok állnak rendelkezésre a karakteradatok hosszának meghatározásához, az aktuális karakterláncban egy részkarakterlánc kereséséhez, a karakterek konvertálásához nagybetűs lefelé és fordítva stb. Ezt az osztályt a továbbiakban részletesebben megvizsgáljuk.

A String osztály mezője, indexelője és tulajdonsága

A String osztály egyetlen mezővel rendelkezik:

Nyilvános statikus csak olvasható karakterlánc Üres;

Az Üres mező üres karakterláncot jelöl, azaz. karaktereket nem tartalmazó karakterlánc. Ez különbözik az üres karakterlánc-hivatkozástól, amely egyszerűen egy nem létező objektumra történik.

Ezenkívül a String osztály egyetlen csak olvasható indexelőt határoz meg:

Nyilvános karakter ez ( get; )

Ez az indexelő lehetővé teszi a karakter lekérését a megadott indexen. A karakterlánc-indexelés, akárcsak a tömbök, nulláról indul. A karakterlánc objektumok állandóak és nem változnak, ezért logikus, hogy a String osztály támogatja a csak olvasható indexelőt.

Végül a String osztály egyetlen csak olvasható tulajdonságot határoz meg:

Nyilvános int Hossz ( get; )

A Length tulajdonság a karakterláncban lévő karakterek számát adja vissza. Az alábbi példa egy indexelő és a Length tulajdonság használatát mutatja be:

Rendszer használata; class Példa ( static void Main() ( string str = "Egyszerű karakterlánc"; // A karakterlánc hosszának és a 6. karakternek a lekérése az indexelővel Console.WriteLine("A karakterlánc hossza (0), a 6. karakter "(1)"" , str.Length, str); ) )

String osztály operátorok

A String osztály túlterheli a következő két operátort: ​​== és !=. Az == operátor két karakterlánc egyenlőségének tesztelésére szolgál. Amikor az == operátort objektumhivatkozásokra alkalmazzuk, általában ellenőrzi, hogy mindkét hivatkozás ugyanarra az objektumra vonatkozik-e. És amikor az == operátort String típusú objektumhivatkozásokra alkalmazzuk, akkor a karakterláncok tartalmát összehasonlítjuk az egyenlőség érdekében. Ugyanez vonatkozik a != operátorra is. Ha String típusú objektumhivatkozásokra alkalmazza, a karakterláncok tartalmát hasonlítják össze az egyenlőtlenség szempontjából. Ugyanakkor más relációs operátorok, köztük az =, ugyanúgy hasonlítják össze a hivatkozásokat a String típusú objektumokra, mint a más típusú objektumokra. És annak ellenőrzéséhez, hogy az egyik karakterlánc nagyobb-e a másiknál, hívja meg a String osztályban definiált Compare() metódust.

Amint később kiderül, sokféle karakterlánc-összehasonlítás kulturális információt használ. De ez nem vonatkozik az == és != operátorokra. Végül is egyszerűen összehasonlítják a karakterek sorszámát a karakterláncokban. (Más szóval, olyan bináris karakterértékeket hasonlítanak össze, amelyeket nem módosítottak kulturális normák, azaz lokális.) Ezért ezek az operátorok a karakterlánc-összehasonlításokat kis- és nagybetű- és kultúraérzéketlen módon hajtják végre.

String osztály metódusai

Az alábbi táblázat az osztály néhány érdekesebb módszerét sorolja fel, cél szerint csoportosítva:

String Methods
Módszer Szerkezet és túlterhelt változatok Célja
String összehasonlítás
Összehasonlítás() public static int Összehasonlítás(string strA, string strB)

Nyilvános statikus int Összehasonlítás (string strA, string strB, bool ignoreCase)

Nyilvános statikus int Összehasonlítás(string strA, string strB, StringComparison ÖsszehasonlításTípus)

Nyilvános statikus int Összehasonlítás (string strA, string strB, bool ignoreCase, CultureInfo kultúra)

Statikus módszer, összehasonlítja az strA karakterláncot az strB karakterlánccal. Pozitív eredményt ad, ha strA nagyobb, mint strB; negatív, ha strA kisebb, mint strB; és nulla, ha az strA és strB karakterláncok egyenlőek. Az összehasonlítás megkülönbözteti a kis- és nagybetűket, és kulturálisan is érzékeny.

Ha az ignoreCase paraméter úgy veszi logikai érték igaz, az összehasonlítás nem veszi figyelembe a kis- és nagybetűk közötti különbségeket. Ellenkező esetben ezeket a különbségeket figyelembe veszik.

A võrdlusType paraméter határozza meg a karakterláncok összehasonlításának konkrét módját. A CultureInfo osztály a System.Globalization névtérben van definiálva.

public static int Összehasonlítás(string strA, int indexA, string strB, int indexB, int long)

Nyilvános statikus int Összehasonlítás(string strA, int indexA, string strB, int indexB, int long, bool ignoreCase)

Nyilvános statikus int Összehasonlítás(string strA, int indexA, string strB, int indexB, int long, StringComparison összehasonlításTípus)

Nyilvános statikus int Összehasonlítás(string strA, int indexA, string strB, int indexB, int long, bool ignoreCase, CultureInfo kultúra)

Összehasonlítja az strA és strB karakterláncok egyes részeit. Az összehasonlítás az strA és strB karakterlánc elemekkel kezdődik, és tartalmazza a hossza paraméter által megadott számú karaktert. A metódus pozitív értéket ad vissza, ha az strA része nagyobb, mint az strB része; negatív érték, ha az strA része kisebb, mint az strB része; és nulla, ha az strA és strB karakterláncok összehasonlított részei egyenlőek. Az összehasonlítás megkülönbözteti a kis- és nagybetűket, és kulturálisan is érzékeny.

ÖsszehasonlításOrdinal() public static int CompareOrdinal(string strA, string strB)

Nyilvános statikus int CompareOrdinal(string strA, int indexA, string strB, int indexB, int count)

Ugyanaz, mint a Compare() metódus, de nem veszi figyelembe a helyi beállításokat

Összehasonlítani() public int Összehasonlítás(objektum érték)

Összehasonlítja a hívó karakterláncot az értékobjektum karakterlánc reprezentációjával. Pozitív értéket ad vissza, ha a hívó karakterlánc nagyobb, mint a karakterlánc értéke; negatív érték, ha a hívó karakterlánc kisebb, mint az értéklánc; és nulla, ha az összehasonlított karakterláncok egyenlőek

public int CompareTo(string strB)

Összehasonlítja a hívó karakterláncot az strB-vel

egyenlő () nyilvános felülírás bool Egyenlő(objektum objektum)

A logikai igaz értéket adja vissza, ha a hívó karakterlánc ugyanazt a karaktersorozatot tartalmazza, mint az obj karakterlánc-reprezentációja. Sorrendi összehasonlítást végez, kis- és nagybetűérzékeny, de kulturálisan érzéketlen

public bool egyenlő (karakterlánc érték)

Public bool Egyenlő(karakterlánc értéke, StringComparison összehasonlítási típusa)

A true logikai értéket adja vissza, ha a hívó karakterlánc ugyanazt a karaktersorozatot tartalmazza, mint a karakterlánc értéke. Sorrendi összehasonlítás történik, kis- és nagybetűk megkülönböztetése, de kulturálisan érzéketlen. A võrdlusType paraméter meghatározza a karakterláncok összehasonlításának konkrét módját

public static bool egyenlő (karakterlánc a, karakterlánc b)

Nyilvános statikus bool egyenlő (a karakterlánc, b karakterlánc, karakterlánc-összehasonlítási típus)

Igaz logikai értékkel tér vissza, ha az a karakterlánc ugyanazt a karaktersorozatot tartalmazza, mint a b karakterlánc. Sorrendi összehasonlítás történik, kis- és nagybetűk megkülönböztetése, de kulturálisan érzéketlen. A võrdlusType paraméter meghatározza a karakterláncok összehasonlításának konkrét módját

A karakterláncok összefűzése (összekapcsolása).
Concat() public static string Concat(string str0, string str1);

public static string Concat(params string value);

A különálló karakterlánc-példányokat egyetlen karakterláncba egyesíti (összefűzés)
Keresés egy karakterláncban
Tartalmaz () public bool Tartalmaz (karakterlánc értéke) Egy módszer, amely lehetővé teszi annak meghatározását, hogy egy karakterlánc tartalmaz-e egy adott részkarakterláncot (értéket)
Kezdődik() public bool Kezdődik(karakterlánc érték)

Public bool StartsWith(karakterlánc érték, StringComparison összehasonlításTípus)

A logikai igaz értéket adja vissza, ha a hívó karakterlánc a részstring értékkel kezdődik. Ellenkező esetben a false logikai érték kerül visszaadásra. A võrdlusType paraméter határozza meg, hogyan kell a keresést végrehajtani.

Végződik() public bool EndsWith(karakterlánc érték)

Nyilvános bool EndsWith(karakterlánc érték, StringComparison összehasonlítási típus)

A logikai igaz értéket adja vissza, ha a hívó karakterlánc a részstring értékkel végződik. Ellenkező esetben a logikai értéket false adja vissza. A võrdlusType paraméter egy adott keresési módszert határoz meg

Indexe() public int IndexOf(karakter érték)

Nyilvános int IndexOf(karakterlánc érték)

Megkeresi egy adott részkarakterlánc vagy karakter első előfordulását egy karakterláncban. Ha a keresett karakter vagy részkarakterlánc nem található, akkor -1-et ad vissza.

public int IndexOf(karakter érték, int startIndex)

Nyilvános int IndexOf(karakterlánc érték, int startIndex)

Nyilvános int IndexOf(karakter érték, int startIndex, int count)

Nyilvános int IndexOf(karakterlánc érték, int startIndex, int count)

A karakter vagy részkarakterlánc értékének első előfordulásának indexét adja vissza a hívó karakterláncban. A keresés a startIndex indexnél megadott elemnél kezdődik, és a count paraméter által megadott számú elemre terjed ki (ha meg van adva). A metódus -1-et ad vissza, ha a keresett karakter vagy részkarakterlánc nem található

LastIndexOf() A túlterhelt verziók hasonlóak az IndexOf() metódushoz

Ugyanaz, mint az IndexOf, de egy karakter vagy részkarakterlánc utolsó előfordulását találja meg az első helyett

Bármilyen index() public int IndexOfAny(char anyOf)

Nyilvános int IndexOfAny(char anyOf, int startIndex)

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

A hívó karakterláncban található anyOf tömb bármely karakterének első előfordulásának indexét adja vissza. A keresés a startIndex index által megadott elemnél kezdődik, és a count paraméter által megadott számú elemre terjed ki (ha van ilyen). A metódus -1-et ad vissza, ha nem található az anyOf tömb egyik karaktere sem. A keresés rendes módon történik

LastIndexOfAny A túlterhelt verziók hasonlóak az IndexOfAny() metódushoz

A hívó karakterláncban található anyOf tömb bármely karakterének utolsó előfordulásának indexét adja vissza

A karakterláncok felosztása és összefűzése
Hasított nyilvános karakterlánc Felosztás (params karakter elválasztó)

Nyilvános karakterlánc felosztása (params karakter elválasztó, int count)

Olyan metódus, amely egy karakterlánc-tömböt ad vissza az ebben a példányban jelenlévő részkarakterláncokkal, amelyeket a megadott karakter vagy karakterlánc tömb elemei választanak el egymástól.

A Split() metódus első formája a hívó karakterláncot részekre bontja. Az eredmény egy tömb, amely tartalmazza a hívó karakterláncból kiolvasott részkarakterláncokat. Az ezeket a részkarakterláncokat elválasztó karakterek az elválasztó tömbben kerülnek átadásra. Ha az elválasztó tömb üres, vagy üres karakterláncra hivatkozik, akkor szóközt használ a részkarakterlánc elválasztójaként. És a második formában ez a módszer a count paraméter által megadott számú részstringet adja vissza.

public string Split (params karakter elválasztó, StringSplitOptions beállítások)

Nyilvános karakterlánc felosztása (sztringelválasztó, StringSplitOptions beállítások)

Nyilvános karakterlánc felosztása (params karakter elválasztó, int count, StringSplitOptions beállítások)

Nyilvános karakterlánc felosztása (karakterlánc elválasztó, int count, StringSplitOptions beállítások)

A Split() metódus első két formája részekre bontja a hívó karakterláncot, és egy tömböt ad vissza, amely tartalmazza a hívó karakterláncból kapott részsztringeket. Az ezeket az alkarakterláncokat elválasztó karakterek az elválasztó tömbben kerülnek átadásra. Ha az elválasztó tömb üres, akkor szóközt használunk elválasztóként. És ennek a módszernek a harmadik és negyedik formájában a sorok száma kerül visszaadásra, amelyet a count paraméter korlátoz.

Az opciók paraméter azonban minden formában megadja az üres karakterláncok kezelésének sajátos módját, amelyek akkor jönnek létre, ha két határoló van egymás mellett. A StringSplitOptions felsorolás csak két értéket határoz meg: Egyik semés RemoveEmptyEntries. Ha az opciók paramétere None, akkor az üres karakterláncok szerepelnek a felosztás végeredményében. eredeti húr. És ha az opciók paraméter értéke RemoveEmptyEntries, akkor az üres karakterláncok kizárásra kerülnek az eredeti karakterlánc felosztásának végeredményéből.

Csatlakozik() nyilvános statikus karakterlánc Csatlakozás (sztringelválasztó, karakterláncérték)

Nyilvános statikus karakterlánc Join (karakterlánc elválasztó, karakterlánc értéke, int startIndex, int count)

Egy új karakterláncot hoz létre egy karakterlánc tömb tartalmának kombinálásával.

A Join() metódus első alakja az értéktömbben átadott, összefűzött részstringekből álló karakterláncot ad vissza. A második űrlap is visszaad egy karakterláncot, amely az értéktömbben átadott részkarakterláncokból áll, de ezek bizonyos számú számlálásra vannak összefűzve, az értéktömb elemétől kezdve. Mindkét formában az egymást követő sorokat az elválasztó paraméterben megadott elválasztó karakterlánc választja el az előző sortól.

Töltő- és vágóvonalak
trim() nyilvános karakterlánc Trim()

Nyilvános karakterlánc Trim(params char trimChars)

Egy módszer, amely lehetővé teszi egy megadott karakterkészlet összes előfordulásának eltávolítását az aktuális karakterlánc elejéről és végéről.

A Trim() metódus első formája eltávolítja a bevezető és a záró szóközöket a hívó karakterláncból. A metódus második formája pedig eltávolítja a trimChars tömbből a bevezető és a záró előfordulásokat a hívó karakterláncból. Mindkét forma visszaadja a kapott karakterláncot.

PadLeft() nyilvános karakterlánc PadLeft(int totalWidth)

Nyilvános karakterlánc PadLeft(int totalWidth, char paddingChar)

Lehetővé teszi a karakterlánc kitöltését a bal oldalon lévő karakterekkel.

A PadLeft() metódus első formája szóközöket vezet be a hívó karakterlánc bal oldalán, így a teljes hossza egyenlő az értékkel a totalWidth paraméter. Ennek a módszernek a második formájában a paddingChar paraméterrel jelölt karaktereket a hívó karakterlánc bal oldalára írjuk be úgy, hogy annak teljes hossza megegyezzen a totalWidth paraméter értékével. Mindkét forma visszaadja a kapott karakterláncot. Ha a totalWidth paraméter értéke kisebb, mint a hívó karakterlánc hossza, akkor a rendszer a módosítatlan hívó karakterlánc másolatát adja vissza.

PadRight() Hasonló a PadLeft()-hez

Lehetővé teszi a karakterlánc jobb oldali karakterekkel való kiegészítését.

Sorok beszúrása, törlése és cseréje
Insert() nyilvános karakterlánc Beszúrás(int startIndex, karakterlánc értéke)

Egy karakterlánc beszúrására szolgál a másikba, ahol az érték az a karakterlánc, amelyet az index startIndexnél a hívó karakterláncba kell beilleszteni. A metódus a kapott karakterláncot adja vissza.

Eltávolítás() nyilvános karakterlánc Eltávolítás(int startIndex)

Nyilvános karakterlánc eltávolítása(int startIndex, int count)

A karakterlánc egy részének eltávolítására szolgál. A Remove() metódus első formájában az eltávolítás az index startIndex által megadott helytől kezdve a karakterlánc végéig történik. És ennek a módszernek a második formájában a count paraméter által megadott számú karakter eltávolításra kerül a karakterláncból, a startIndex index által megadott helytől kezdve.

Csere() nyilvános karakterlánc Csere(char oldChar, char newChar)

Nyilvános karakterlánc Csere (karakterlánc oldValue, string newValue)

A karakterlánc egy részének helyettesítésére szolgál. A Replace() metódus első formája a hívó karakterláncban az oldChar összes előfordulását newCharra cseréli. És ennek a metódusnak a második formájában az oldValue karakterlánc minden előfordulását a hívó karakterláncban a newValue karakterlánc helyettesíti.

Ügyváltás
ToUpper() nyilvános karakterlánc ToUpper()

A hívó karakterlánc összes betűjét nagybetűvel írja.

Leengedni() nyilvános karakterlánc ToLower()

A hívó karakterlánc összes betűjét kisbetűvé teszi.

Alkarakterlánc beszerzése karakterláncból
Alkarakterlánc() public string Alkarakterlánc(int startIndex)

Nyilvános karakterlánc Alkarakterlánc(int startIndex, int hosszúság)

A Substring() metódus első alakjában az alsztringet a startIndex paraméter által jelzett helytől a hívó karakterlánc végéig kinyerjük. És ennek a módszernek a második formájában egy részkarakterláncot nyerünk ki, amely a hossza paraméter által megadott számú karakterből áll, a startIndex paraméter által jelzett helytől kezdve.

A következő programpélda a fenti módszerek közül többet használ:

Rendszer használata; a System.Collections.Generic használatával; a System.Linq; a System.Text használatával; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( // Hasonlítsa össze az első két karakterláncot string s1 = "ez egy karakterlánc"; string s2 = "ez szöveg, ez egy karakterlánc"; if (String.CompareOrdinal (s1, s2) != 0) Console.WriteLine("Az s1 és s2 karakterláncok nem egyenlőek"); if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine( "Azonban ugyanazt a szöveget tartalmazzák"); // Karakterlánc-összefűzés Console.WriteLine(String.Concat("\n" + "One, two ","three, four")); // Keresés a karakterláncban // Első előfordulás of substring if (s2. IndexOf("this") != -1) Console.WriteLine("A \"this\" szó található a sorban, ez "+ "at: (0) pozícióban", s2. IndexOf("this")); / / Az alkarakterlánc utolsó előfordulása if (s2.LastIndexOf("this") != -1) Console.WriteLine("A \"this\" utolsó előfordulása a következő helyen: ( 0) position", s2.LastIndexOf("this" )); // Keresés a karaktertömbből char myCh = ("S","x", "t"); if (s2.IndexOfAny(myCh) != -1) Console.WriteLine("A ch "+" tömb egyik karaktere az aktuális aktuális vonal a (0) pozícióban", s2.IndexOfAny(myCh)); // Határozza meg, hogy a karakterlánc az adott részkarakterlánccal kezdődik-e if (s2.StartsWith("ez szöveg") == true) Console.WriteLine("Substring található!"); // Határozza meg, hogy a karakterlánc tartalmaz-e részkarakterláncot // a felhasználó operációs rendszer karakterláncának meghatározására szolgáló példával myOS = Environment.OSVersion.ToString(); if (myOS.Contains("NT 5.1")) Console.WriteLine("Az Ön operációs rendszere Windows rendszer XP"); else if (myOS.Contains("NT 6.1")) Console.WriteLine("Az Ön operációs rendszer Windows 7"); Console.ReadLine(); ) ) )

Egy kicsit a karakterláncok összehasonlításáról C#-ban

Az összes karakterlánc-feldolgozási művelet közül valószínűleg ez a leggyakrabban végzett karakterlánc összehasonlítása a másikkal. Mielőtt bármilyen karakterlánc-összehasonlítási módszert megvizsgálnánk, a következőket kell hangsúlyozni: a karakterlánc-összehasonlítást a .NET-keretrendszerben két fő módon lehet elvégezni:

    Először is, az összehasonlítás tükrözheti egy adott kulturális környezet szokásait és normáit, amelyek gyakran olyan kulturális környezetek, amelyek egy program végrehajtása során érvényesülnek. Ez a szokásos viselkedés egyes, bár nem minden összehasonlítási módszernél.

    Másodszor, az összehasonlítást a kulturális környezet beállításaitól függetlenül csak a karakterláncot alkotó karakterek sorszámain lehet elvégezni. Általánosságban elmondható, hogy a karakterláncok kulturálisan érzéketlen összehasonlítása lexikográfiai sorrendet (és nyelvi jellemzőket) használ annak meghatározására, hogy egy karakterlánc nagyobb, kisebb vagy egyenlő-e egy másik karakterláncnál. Sorrendi összehasonlításban a karakterláncok egyszerűen az egyes karakterek módosítatlan értéke alapján vannak rendezve.

A karakterláncok kultúrák és sorszám szerinti összehasonlítása közötti különbségek, valamint az egyes összehasonlítások következményei miatt erősen javasoljuk, hogy használja a Microsoft által jelenleg kínált bevált módszereket. Végtére is, ha a karakterláncok összehasonlításának helytelen módját választja, a program hibás működéséhez vezethet, ha a fejlesztési környezettől eltérő környezetben működik.

A karakterláncok összehasonlításának módja nagyon fontos döntés. Általános szabályként és kivétel nélkül érdemes kulturálisan érzékeny karakterlánc-összehasonlítást választani, ha az az eredmény megjelenítése a felhasználó számára (például lexikográfiai sorrendben rendezett karakterláncok megjelenítése). De ha a karakterláncok rögzített információkat tartalmaznak, amelyeket nem kell módosítani a kulturális különbségek miatt, például fájlnevet, kulcsszó, webhelycím vagy biztonsággal kapcsolatos érték, akkor válasszon sorszámú karakterlánc-összehasonlítást. Természetesen az adott alkalmazás sajátosságai határozzák meg a karakterláncok összehasonlításának megfelelő módját.

A String osztály számos karakterlánc-összehasonlítási módszert kínál, amelyeket a fenti táblázat sorol fel. A legsokoldalúbb közülük a Compare() metódus. Lehetővé teszi két karakterlánc teljes vagy részleges összehasonlítását, a kis- és nagybetűk megkülönböztetése nélkül, a típusparaméter által meghatározott összehasonlítás útján. StringComparison, valamint a típusparaméter által biztosított kulturális információk CultureInfo.

A Compare() metódus azon túlterhelései, amelyek nem tartalmaznak StringComparison típusú paramétert, a karakterláncok kis- és nagybetű- és kultúraérzékeny összehasonlítását hajtják végre. Azokban a túlterhelt változatokban, amelyek nem tartalmaznak CultureInfo típusú paramétert, a kultúra információit az aktuális futási környezet határozza meg.

A StringComparison típus egy felsorolás, amely meghatározza az alábbi táblázatban látható értékeket. Ezen értékek használatával az alkalmazás igényeinek megfelelő karakterlánc-összehasonlításokat szervezhet. Ezért egy StringComparison típusú paraméter hozzáadása kiterjeszti a Compare() metódus és más összehasonlítási módszerek, például az Equals() képességeit. Lehetővé teszi továbbá a karakterláncok összehasonlításának egyértelmű meghatározását.

A kulturálisan érzékeny karakterlánc-összehasonlítások és az ordinális összehasonlítások közötti különbségek miatt fontos, hogy a lehető legpontosabb legyen ebben a tekintetben.

A StringComparison enumban meghatározott értékek
Jelentése Leírás
CurrentCulture A karakterlánc-összehasonlítás az aktuális kultúrabeállítások használatával történik
CurrentCultureIgnoreCase A karakterlánc-összehasonlítás az aktuális kultúra-beállításokkal történik, de nem különbözteti meg a kis- és nagybetűket
InvariánsKultúra A karakterlánc-összehasonlítás megváltoztathatatlanok használatával történik, azaz. egyetemes adatok a kulturális környezetről
InvariantCultureIgnoreCase A karakterlánc-összehasonlítás megváltoztathatatlanok használatával történik, azaz. univerzális kulturális adatok és a kis- és nagybetűk megkülönböztetése nélkül
Sorrendi A karakterlánc-összehasonlítás a karakterláncban szereplő karakterek sorrendi értékével történik. Ebben az esetben a lexikográfiai rend sérülhet, ill egyezmények egy adott kulturális környezetben elfogadottakat figyelmen kívül hagyják
OrdinalIgnoreCase A karakterlánc-összehasonlítás a karakterláncban lévő karakterek sorrendi értékével történik, de a kis- és nagybetűk nem érzékenyek

Mindkét esetben a Compare() metódus negatív értéket ad vissza, ha az első összehasonlított karakterlánc kisebb, mint a második; pozitív érték, ha az első összehasonlított karakterlánc nagyobb, mint a második; és végül nulla, ha mindkét összehasonlított karakterlánc egyenlő. Bár a Compare() metódus nullát ad vissza, ha az összehasonlítandó karakterláncok egyenlőek, általában jobb az Equals() metódus vagy az == operátor használata annak meghatározására, hogy a karakterláncok egyenlőek-e.

A helyzet az, hogy a Compare() metódus a rendezési sorrend alapján határozza meg az összehasonlított karakterláncok egyenlőségét. Például, ha a karakterláncokat kulturálisan hasonlítjuk össze, akkor mindkét karakterlánc rendezési sorrendben azonos lehet, de lényegében nem egyenlő. Alapértelmezés szerint a karakterláncok egyenlőségét az Equals() metódus határozza meg, a karakterek sorszáma alapján, nem pedig kulturálisan. Ezért alapértelmezés szerint ebben a módszerben mindkét karakterlánc összehasonlításra kerül az abszolút, karakterenkénti egyenlőség érdekében, hasonlóan ahhoz, ahogy az == operátorban történik.

A Compare() metódus sokoldalúsága ellenére a karakterláncok egyszerű ordinális összehasonlításához egyszerűbb a CompareOrdinal() metódus használata. Végül ne feledje, hogy a CompareTo() metódus csak kulturálisan érzékeny módon hasonlítja össze a karakterláncokat.

A következő program bemutatja a Compare(), Equals(), CompareOrdinal() metódusok, valamint az == és != operátorok használatát a karakterláncok összehasonlítására. Vegye figyelembe, hogy az első két összehasonlítási példa egyértelműen bemutatja a kulturálisan érzékeny karakterlánc-összehasonlítások és az angol sorszám-összehasonlítások közötti különbségeket:

Rendszer használata; class Példa ( static void Main() ( string str1 = "alpha"; string str2 = "Alpha"; string str3 = "Béta"; string str4 = "alpha"; string str5 = "alfa, béta"; int eredmény; / / Először mutasd be a különbségeket a kultúraérzékeny karakterlánc-összehasonlítás és az ordinális összehasonlítás eredménye között = String.Compare(str1, str2, StringComparison.CurrentCulture); Console.Write("Kultúraérzékeny karakterlánc-összehasonlítás: "); if (eredmény 0 ) Console .WriteLine(str1 + " nagyobb, mint " + str2); else Console.WriteLine(str1 + "ez " + str2); result = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write("Sorrend összehasonlítás sorok: "); if (0 eredmény) Console.WriteLine(str1 + " nagyobb, mint " + str2); else Console.WriteLine(str1 + "egyenlő: " + str4); // Használja a CompareOrdinal() metódus eredményét = String.CompareOrdinal( str1, str2); Console.Write("Karakterláncok összehasonlítása a CompareOrdinal():\n" használatával; if (eredmény 0) Console.WriteLine(str1 + " nagyobb, mint " + str2); else Console.WriteLine (str 1 + "egyenlő: " + str4); Console.WriteLine(); // Karakterlánc-egyenlőség meghatározása a == operátor segítségével // Ez a karakterláncok sorrendi összehasonlítása if (str1 == str4) Console.WriteLine(str1 + " == " + str4); // Soregyenlőtlenség észlelése az != operátor segítségével if(str1 != str3) Console.WriteLine(str1 + " != " + str3); if(str1 != str2) Console.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Sorrendi kis- és nagybetűk közötti karakterlánc-összehasonlítás végrehajtása az Equals() metódussal if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Karakterláncok összehasonlítása az Equals() metódus használatával az OrdinalIgnoreCase paraméterrel " + " : \n" + str1 + " egyenlő a következővel: " + str2); Console.WriteLine(); // Karakterláncok részeinek összehasonlítása if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Karakterláncok összehasonlítása a jelenlegi kultúra alapján:" + "\n3 első karakter a " + str2 + " karakterlánc nagyobb, mint a " + str5" karakterlánc első 3 karaktere); ) ) )

A program futtatása a következő eredményt adja:

A C nyelvben nincs külön adattípus "karakterlánc". A karakterláncokkal való munkavégzés char típusú egydimenziós tömbök használatával valósul meg, pl. a karakterlánc egy egydimenziós char tömb, amelyet egy null byte zár le.

A nullbájt egy olyan bájt, amelynek minden bitje nulla, míg a ´\0´ karakterkonstans (egy sorlezáró vagy nulla bájt) van megadva a nullbájthoz. Ezért, ha egy karakterláncnak k karaktert kell tartalmaznia, akkor k+1 elemet kell megadni a tömbleírásban.

Például char a; - azt jelenti, hogy a karakterlánc hat karakterből állhat, és az utolsó bájt nullának van fenntartva.

A karakterlánc-konstans bezárt karakterek halmaza dupla idézőjelek. Például:

char S="Munkakarakterláncokkal";

Nem szükséges kifejezetten megadni a ´\0' karaktert egy karakterlánc-konstans végén.

Ha karakterláncokkal dolgozik, kényelmes a mutatók használata, például:

x = "BSUIR";

x = (i>0)? "pozitív":(i<0)? "отрицательное":"нулевое";

Emlékezzünk vissza, hogy általában két szabványos függvényt használnak karakterláncok bevitelére:

scanf()- bevezeti a karakterlánc-változók értékeit bemeneti specifikációval %s az első „szóköz” karakter megjelenése előtt (az „&” karaktert nem kell megadni a string adatazonosító előtt);

kap()- a soron belül szóközt tartalmazó sor beírása az ENTER billentyű lenyomásával fejezhető be.

Mindkét függvény automatikusan null byte-tal zárja le a karakterláncot.

A sorokat a printf() vagy puts() függvény adja ki az első nullbájtig ('\0'):

printf() nem mozgatja a kurzort a kimenet után egy új sor elejére;

tesz() automatikusan áthelyezi a kurzort a karakterlánc-információ kimenete után egy új sor elejére.

Például:

printf(" Írjon be egy karakterláncot szóközök nélkül: \n");

scanf("%s",Str);

puts("Írjon be egy karakterláncot");

A karakterláncokkal kapcsolatos többi műveletet szabványos könyvtári függvényekkel hajtják végre, amelyek prototípusait a fájl írja le húr.h. Vessünk egy pillantást a leggyakrabban használt funkciókra.

int függvény strlen(char *S) visszaadja a karakterlánc hosszát (a karakterláncban lévő karakterek számát), figyelmen kívül hagyva a befejező null byte-ot.

char *S1=”Minszk!\0”, S2=”BSUIR-Hurrá!”;

printf(“ %d, %d .”, strlen(S1), strlen(S2));

A program ezen szakaszának eredménye:

int függvény strcpy(char *S1, char *S2) - az S2 karakterlánc tartalmát az S1 karakterláncba másolja.

Funkció strcat(char *S1, char *S2) - az S2 karakterláncot az S1 karakterlánchoz kapcsolja, és abba a tömbbe helyezi, ahol az S1 karakterlánc volt, miközben az S2 karakterlánc nem változik. Az S1 karakterláncot lezáró null byte helyére az S2 karakterlánc első karaktere kerül.

int függvény strcmp(char *S1, char *S2) összehasonlítja az S1 és S2 karakterláncokat, és visszaadja az értéket<0, если S10, ha S1>S2; =0, ha a karakterláncok egyenlőek, azaz. ugyanannyi azonos karaktert tartalmaznak.

Az S karakterlánc számmá alakításának függvényei:

Egész szám: int atoi(char*S);

Hosszú egész szám: hosszú atol(char*S);

Valódi: dupla atof(char*S);

hiba esetén ezek a függvények 0-t adnak vissza.

Függvények egy V szám S karakterláncsá alakítására.

»A megbízható SEO Ügynökség India növelheti a kisvállalkozások bevételeit

A felhasználók 80%-a a vásárlás előtt keres a Google-on és más keresőmotorokon, és a keresőmotorokon keresztül generált megkeresések több mint 50%-a konvertálódik. Ez a két statisztika bizonyítja a keresőoptimalizálás fontosságát. Számos olyan statisztika és tény létezik, amelyek egyértelművé teszik: minden kis-, közepes vagy nagyméretű vállalkozásnak professzionális SEO-szolgáltatásra van szüksége. A kisvállalkozások és startupok gyakran szembesülnek költségvetési problémákkal. Bármely megbízható indiai SEO ügynökség segítségét igénybe vehetik, hogy a költségvetésükben a legjobb SEO szolgáltatást kapják bevételeik növelése érdekében.
A keresés nagy hatással van a fogyasztók elméjére. A fő keresőoptimalizálási szakértők által megosztott különféle statisztikák szerint különböző engedélyezett webhelyeken, mint például a Search Engine Land, a Moz, a SEO Journal, a Digital Marketers India, a Hubspot stb. A SEO megragadja a leadek többségét. Ezenkívül az organikus keresési eredményekből érkező leadek konverziós aránya magasabb. Ezek a statisztikák és a fogyasztói magatartás egyértelműbben rávilágít arra, hogy a legjobb SEO szolgáltatás nem luxus, hanem bármely vállalkozás szükséglete.
A verseny megkerüléséhez és az üzleti növekedés fokozásához minden szervezetnek igénybe kell vennie a keresőoptimalizálási szolgáltatásokat. A nagy márkák elegendő pénzt fektethetnek be egy kiváló SEO cég vagy SEO specialista által kínált szakértő SEO szolgáltatásba, de a kisvállalkozások tulajdonosai gyakran kompromisszumot kötnek ennek a szolgáltatásnak a minőségében a kisebb költségvetés miatt. Kemény tény, hogy a kisvállalkozások és a startupok végül elhagyják a professzionális SEO szolgáltatással megteremthető lehetőségeket, vagy igénybe vesznek egy olcsó SEO szolgáltatást, amely nem hoz pozitív eredményt.
A kisvállalkozások tulajdonosai és induló vállalkozások a korlátozott költségvetés mellett is igénybe vehetik a professzionális SEO szolgáltatásokat. A legjobb megoldás egy megbízható SEO cég keresése Indiában. Indiában sok SEO szakértő dolgozik a digitális marketing ügynökséggel, és az iparág legjobb szolgáltatásokat kínálja. Ők tudják biztosítani a szükséges SEO szolgáltatásokat a költségvetésben. A bérek tárgyalhatók egy indiai SEO ügynökséggel, hogy jobb szolgáltatásokat kapjanak alacsonyabb áron. Azonban ne dőljön be az olcsó SEO szolgáltatásnak, amely kevesebbet fizet, és többet ígér, mivel a szakértelem saját költségén jár. Meg kell tekintenie a portfóliót, vagy megfelelő kérdéseket kell feltennie, mielőtt céggel szerződne.
Az indiai SEO szakértők jól ismerik a keresőoptimalizálás legjobb gyakorlatait. Ezenkívül Indiában van néhány SEO-szakértő, például Ash Vyas, akik arra szakosodtak, hogy a megadott költségvetés mellett a legjobb keresőoptimalizálási stratégiát készítsék el egy vállalkozás számára. A SEO szakemberek világos tervet készítenek, és azt is megosztják, hogy mi lehet a várt eredmény. Így tisztában lehet befektetésével és megtérülésével. Ez segít a jobb üzleti döntés meghozatalában.
Jó ötlet egy megbízható, indiai SEO cég keresése és szerződéskötése, amely a lehető leghamarabb a legjobb SEO szolgáltatásokat kínálja. Kis költségvetéssel és korlátozott tevékenységekkel is kezdheti a weboldalak indexelését és a kulcsszavak fellendítését a keresőmotorokban. Ne várja meg a tökéletes időt vagy egy napot, amikor több ezer dollárt kell befektetnie a legjobb SEO szolgáltatásokba. A korai kezdés segít gyorsabb eredmények elérésében, ha agresszíven alkalmazza marketingszemléletét. Egy indiai székhelyű, megbízható SEO cég segít meghatározni jelenlegi és jövőbeli terveit, hogy jó eredményeket érjen el. Az indexelt oldalak növelték a helyezéseket, és a folyamatos professzionális SEO gyakorlattal kialakított hiteles márka megduplázza a megkereséseket, az üzletet és a bevételeket. Bármely kisvállalkozás indulhat két számjegyű befektetéssel a professzionális SEO szolgáltatásokba. Számos SEO ügynökség van Indiában, amelyek alacsony költségvetést kínálnak, mégis orientált keresőoptimalizálási szolgáltatásokat nyújtanak.

száműzetésből származó felmérések

  • CraigWew

    12.04.2018

    »Az ügyféllel való kapcsolat kialakításának fontossága az ingatlan- és általános értékesítésben

    Az ügyféllel való kapcsolat kialakításának fontossága.
    Az ügyféllel való kapcsolat kialakítását ki kell érdemelni, és az értékesítési folyamat szerves részeként kell megközelíteni.
    Ahhoz, hogy az ügyfél és önmaga valódi egy az egyhez viszonyba kerüljön, két dologra van szükség!
    Először is tudatosnak kell lenned és ott kell lenned! Másodszor meg kell értened, hogy ennek a folyamatnak két különböző szakasza van.
    A-Légy ott-mit jelent ez?
    o A legtöbb ember nem igazán figyel a másik emberre, miközben beszél. Általában annyira elfoglaltak a következő válaszuk vagy kijelentésük megfogalmazásával, hogy aligha tudtak igazán hallgatni.
    o Ha ez úgy hangzik, mint te, ott lenni azt jelenti, hogy fogd be és hallgass!
    B-Mi az első vagy kezdeti szakasz?
    o Általában csak néhány perced van arra, hogy az ügyfelek elméjében úgy érezd magad, mint akivel foglalkozni szeretnének.
    o Ha kétségei vannak, a legjobb, ha először olyan kérdéseket tesz fel, amelyek felkeltik őket, és magukról beszélnek.
    o Mindig biztonságos szakemberként megjelenni – nem sztoikusra vagy szárazra gondolok, hanem valakire, aki tudja, mit csinál, beszél és nézi a szerepét.
    C-Egyéb szakaszok
    o Az idő múlásával a beszélgetések és a felmerülő kérdések révén vagy megállapítja a képességeit, vagy nem.
    o Legyen tudatában annak, hogy valószínűleg egy ideig mérni fognak. A jó hír az, hogy egy bizonyos ponton, ha sikeres volt a kapcsolat kialakítása, akkor ellazulnak, és mindketten az otthon megtalálására vagy eladására koncentrálhatnak.
    Mi segíthet még a kapcsolat kialakításában?
    o Megpróbálva megérteni a különböző személyiségtípusokat, majd a megfelelő kérdéseket mondva és feltenni.
    o Ha jó a kapcsolatod (a vevővel azonos hullámhosszra kerülsz), akkor az eladás lényegében véget ért, most már csak a megfelelő otthon megtalálása vagy a tőzsdei papírok kitöltése van hátra.
    Mi a helyzet a különböző személyiségekkel
    o Mivel ez nem egy pszichiátriai könyv, most csak két fő típust értsen meg.
    o Vannak introvertált és extrovertált emberek.
    o Tudod a típust. Gondoljon három olyan személyre, akit ismer, és amely megfelel az egyes besorolásoknak.
    Mi a helyzet a testbeszéddel és a beszédmintákkal?
    o Ha gyorsan vagy lassan beszélnek, próbálja utánozni beszédmintájukat.
    o Ha hangosan vagy halkan beszélnek, tegye ugyanezt. Előre vagy hátra hajolnak?
    o Mondanom sem kell, hogy sok könyvet írtak erről a témáról. Legyen tudatában annak, hogy ez egy fontos tényező – különösen akkor, ha egy konferenciateremben ül vagy valaki otthonában egy 400 000 dolláros üzletről beszél.
    A kapcsolat kialakítása tanulható és fejleszthető készség.
    o Mindannyian tapasztaltunk már olyan eladót, aki eladott nekünk valamit, de mégsem éreztük úgy, hogy eladtak minket. Ennek az az oka, hogy ő érezte jól magát ott, ahol megbízott bennük.
    Hogyan alakítsuk ki a kapcsolatot?
    o Használja a szemét és a fülét, és tegyen fel kérdéseket. megmagyarázni
    o Használja a szemet:
    o Nézze meg a ruhájukat – az autójukat – a személyes javaikat, és tényleg azt értem, hogy nézze meg őket, és fejtse meg, mit árul el róluk.
    o Használja a füleket:
    o Hallgassa meg, mit mondanak, és tegyen fel kérdéseket, hogy a valódi MOTIVÁCIÓK mélyére jusson!
    Most az egész beszélgetés során valószínűleg lesz egy-két dolog, amit felfedezni fog, ami közös bennük. (Család, földrajzi területek, horgászat stb.) Ha közös nevezőre bukkan, tudassa velük, hogy ismerős, majd szánjon egy percet, hogy megbeszélje velük.
    Mi a Cél?
    o Ha egyszer elfogadnak közülük, akkor valóban nagy tapasztalatra tehet szert az értékesítésben, mivel most együtt, majd csapatként dolgozik – már nem az az eladó, aki jelenleg tanácsadói pozícióban van. .
    o Ne feledje, az ügyfél vagy megengedi, vagy nem engedi belépni a világába. Ha ezt megérted, és valóban keményen dolgozol, hogy empatikussá válj vele, akkor bizalmi pozíciót szerezhetsz. A legtöbb esetben valóban látni fogod, hogy ellazulnak (testbeszéd), amikor ez megtörténik, amikor úton vagy.
    o Ennek illusztrálására tartottál-e valaha beszédet, és észrevetted, hogy amikor végre kapcsolatba lépsz a hallgatóság egyik tagjával, ők helyeslően bólogatnak. Ezek a dolgok elcsépeltnek tűnhetnek, de nem azok.
    Zárásként elmondható, hogy ha sikerül kivívni a vásárlók bizalmát, egy termék vagy szolgáltatás értékesítése sokkal könnyebb, és az élmény minden érintett számára kellemetlen lehet.
    Mindig emlékezz arra, hogy a győzelem/nyerés a legjobb helyzet.

A modern C++ szabvány függvényekkel és tulajdonságokkal (változókkal) rendelkező osztályt határoz meg a karakterláncokkal végzett munka szervezéséhez (a klasszikus C nyelvben nincsenek karakterláncok, csak char tömbök vannak):

#beleértve

#beleértve

#beleértve

A karakterláncokkal való munkavégzéshez egy szabványos névteret is fel kell vennie:

A névtér használata std;

Ellenkező esetben mindenhol a string helyett az std::string osztályleírót kell megadnia.

Az alábbiakban egy példa látható egy programra, amely sztringgel működik (régi C-kompatibilis fordítóprogramokban nem működik!):

#beleértve #beleértve #beleértve névtér használata std; int main() (string s = "Teszt"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->erase(s2->end()); cout<< s2->c_str(); cin.get(); visszatérés 0; )

A karakterlánc osztály főbb jellemzői:

  • inicializálás karaktertömbbel (beépített karakterlánc) vagy más string típusú objektummal. A beépített típus nem rendelkezik a második képességgel;
  • az egyik sor átmásolása a másikba. Beépített típushoz az strcpy() függvényt kell használnunk;
  • hozzáférés egy karakterlánc egyes karaktereihez olvasáshoz és íráshoz. A beépített tömbben ez az index-művelettel vagy a mutató segítségével történő indirekt címzéssel történik;
  • két karakterlánc összehasonlítása az egyenlőség érdekében. Beépített típus esetén az strcmp() család függvényei használatosak;
  • két karakterlánc összefűzése (összefűzése), amely vagy harmadik karakterláncként adja meg az eredményt, vagy az eredeti karakterláncok egyike helyett. Beépített típusnál az strcat() függvényt használjuk, de ahhoz, hogy az eredményt új sorban kapjuk meg, sorban kell használni az strcpy() és strcat() függvényeket, valamint gondoskodni kell a memóriafoglalásról is;
  • beépített eszköz egy karakterlánc hosszának meghatározására (az osztályméret() és az l ength() tagfüggvényei. Egy beépített típusú karakterlánc hosszát csak úgy tudjuk megtudni, ha az strlen() függvénnyel számítjuk ki;
  • az a képesség, hogy megtudja, hogy egy karakterlánc üres-e.

Nézzük meg közelebbről ezeket az alapvető jellemzőket.

String inicializálás leírásánál és húr hossza(kivéve a befejező null lezárót):

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

A karakterlánc lehet üres is:

String st2;

Annak ellenőrzésére, hogy vajon üres-e a karakterlánc, összehasonlíthatja a hosszát 0-val:

if (!st.size()) // üres

vagy használja az üres() metódust, amely üres karakterlánc esetén igaz, nem üres karakterlánc esetén false értéket ad vissza:

if (st.empty()) // üres

A karakterlánc létrehozásának harmadik formája egy string típusú objektumot inicializál egy másik, azonos típusú objektummal:

String st3(st);

Az st3 karakterlánc inicializálása az st karakterlánccal történik. Hogyan biztosíthatjuk, hogy ezek húrok egyeznek? Használjuk az összehasonlító operátort (==):

Ha (st == st3) // az inicializálás sikerült

Hogyan másolja át az egyik sort a másikba? A szokásos hozzárendelési operátorral:

st2 = st3; // st3 másolása st2-be

Mert karakterlánc összefűzés az összeadás operátort (+) vagy az összeadás-hozzárendelés operátort (+=) használjuk. Legyen két sor megadva:

String s1("hello, "); string s2("világ\n");

Kaphatunk egy harmadik karakterláncot, amely az első kettő összefűzéséből áll, így:

s3 karakterlánc = s1 + s2;

Ha s2-t szeretnénk hozzáadni az s1 végéhez, akkor ezt kell írnunk:

S1 += s2;

Az összeadás művelet osztályobjektumokat fűzhet össze húr nem csak egymás között, hanem beépített típusú húrokkal is. A fenti példát átírhatja úgy, hogy a speciális karaktereket és írásjeleket a beépített char * , a jelentős szavakat pedig az osztálykarakterlánc objektumai jelöljék:

Const char *pc = ", "; string s1("hello"); string s2("világ"); string s3 = s1 + pc + s2 + "\n"; cout<< endl << s3;

Az ilyen kifejezések azért működnek, mert a fordító "tudja", hogyan kell automatikusan átalakítani a beépített típusú objektumokat osztálykarakterlánc objektumaivá. Az is lehetséges, hogy egyszerűen hozzárendeljen egy beépített karakterláncot egy karakterlánc objektumhoz:

String s1; const char *pc = "egy karaktertömb"; s1=pc; // jobb

A fordított átalakítás az nem működik. A következő beépített karakterlánc-inicializálás megkísérlése fordítási hibát okoz:

Char*str = s1; // fordítási hiba

Ehhez a konverzióhoz kifejezetten meg kell hívnia a c_str() ("C string") nevű tagfüggvényt:

Const char *str = s1.c_str();

A c_str() függvény egy mutatót ad vissza egy karaktertömbhöz, amely a string objektum karakterláncát tartalmazza, ahogy az a beépített karakterlánc típusban lenne. A const kulcsszó itt megakadályozza azt a „veszélyes” lehetőséget a modern vizuális környezetekben, hogy egy objektum tartalmát mutatón keresztül közvetlenül módosítsák.

Nak nek egyéni karakterek egy string típusú objektum, akárcsak egy beépített típus, az indexművelettel érhető el. Például itt van egy kódrészlet, amely az összes pontot aláhúzással helyettesíti:

String str("www.disney.com"); int méret = str.size(); for (int i = 0; i< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

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

Igaz, itt nem a string osztály csere metódusát használjuk, hanem az azonos nevű algoritmust:

#beleértve

Mivel a karakterlánc objektum tárolóként viselkedik, más algoritmusok is alkalmazhatók rá. Ez lehetővé teszi olyan problémák megoldását, amelyeket a karakterlánc-osztály függvényei közvetlenül nem oldanak meg.

Az alábbiakban röviden ismertetjük a karakterlánc osztály főbb operátorait és funkcióit, a táblázatban található hivatkozások orosz nyelvű leírásokhoz vezetnek az interneten. A karakterlánc-osztály képességeinek teljesebb listáját lásd például a Wikipedia vagy a cplusplus.com webhelyen.

Karakterek megadása egy karakterláncban

operátor=

értékeket rendel egy karakterlánchoz

hozzárendelni

karaktereket rendel egy karakterlánchoz

Hozzáférés az egyes karakterekhez

nál nél

a megadott karakter lekérése az index határokon kívüli ellenőrzésével

operátor

a megadott karakter megszerzése

elülső

az első karakter megszerzése

vissza

az utolsó karakter megszerzése

adat

visszaad egy mutatót a karakterlánc első karakterére

c_str

visszatér módosíthatatlan A karakterlánc karaktereit tartalmazó C karaktertömb

A húr kapacitásának ellenőrzése

üres

ellenőrzi, hogy egy karakterlánc üres-e

méret
hossz

a karakterláncban lévő karakterek számát adja vissza

max_size

a karakterek maximális számát adja vissza

lefoglal

tárhelyet tart fenn

Műveletek egy karakterláncon

egyértelmű

törli a karakterlánc tartalmát

betét

karakter beillesztés

törli

karakter eltávolítása

visszavet

karakter hozzáadása a karakterlánc végéhez

pop_back

eltávolítja az utolsó karaktert

mellékel

operátor+=

karaktereket ad a karakterlánc végéhez

összehasonlítani

két karakterláncot hasonlít össze

cserélje ki

lecseréli a megadott karakter minden előfordulását

alstr

részkarakterláncot ad vissza

másolat

karaktereket másol

átméretezni

megváltoztatja a tárolt karakterek számát

Húrok. Vonal bemenet/kimenet. Formázott I/O. String feldolgozás szabványos C nyelvi függvényekkel.. Munka a memóriával.

1.1. Karakterláncok deklarálása és inicializálása.

A karakterlánc egy karaktertömb, amely üres „\0” karakterrel végződik. Egy karakterlánc normál karaktertömbként van deklarálva, például

char s1; // kilenc karakter hosszúságú karakterlánc

char*s2; // mutató a karakterláncra

Az s1 és s2 mutató között az a különbség, hogy az s1 mutató egy elnevezett konstans, míg az s2 mutató egy változó.

A karakterlánc-konstansok dupla idézőjelek közé vannak zárva, ellentétben a karakterekkel, amelyek egyszeres idézőjelek közé vannak zárva. Például,

– Ez egy húr.

Egy karakterlánc-konstans hossza a szabvány szerint nem haladhatja meg az 509 karaktert. Számos megvalósítás azonban lehetővé teszi a hosszabb karakterláncok használatát.

A karakterláncok inicializálásánál jobb, ha nem adjuk meg a tömb méretét, a fordító ezt úgy teszi meg, hogy megszámolja a karakterlánc hosszát, és hozzáad egyet. Például,

char s1 = "Ez egy karakterlánc.";

A C programozási nyelvben nagyszámú függvény létezik a karakterláncokkal való munkavégzéshez, amelyek prototípusait az stdlib.h és a string.h fejlécfájlok ismertetik. Az ezekkel a funkciókkal való munkavégzésről a következő bekezdésekben lesz szó.

1.2. Vonal bemenet/kimenet.

Karakterlánc beírásához a konzolból használja a függvényt

char* gets(char*str);

amely karakterláncot ír az str címre, és visszaadja a bemeneti karakterlánc címét. A függvény leállítja a bevitelt, ha a „\n” vagy az EOF (fájl vége) karakterrel találkozik. Az újsor karakter nem kerül másolásra. Az olvasási sor végére egy null byte kerül. Siker esetén a függvény egy mutatót ad vissza az olvasási sorra, sikertelenség esetén pedig NULL-t.

Ha karakterláncot szeretne kiadni a konzolra, használja a szabványos függvényt

int tesz (const char *s);

amely siker esetén nem negatív számot, kudarc esetén pedig EOF-t ad vissza.

A gets and puts függvény prototípusait az stdio.h fejlécfájl írja le.

#beleértve

printf("Beviteli karakterlánc: ");

1.3. Formázott I/O.

A konzolról érkező formázott bevitelhez használja a függvényt

int scanf (const char *formátum, ...);

amely siker esetén a beolvasott adategységek számát, sikertelenség esetén pedig EOF-t adja vissza. A format paraméternek olyan formátum karakterláncra kell mutatnia, amely tartalmazza a bemeneti formátum specifikációit. A formátum karakterlánc után következő argumentumok számának és típusának meg kell egyeznie a formátum karakterláncban megadott bemeneti formátumok számával és típusával. Ha ez a feltétel nem teljesül, akkor a függvény eredménye megjósolhatatlan.

A szóköz, a "\t" vagy a "\n" karakter a formátum karakterláncában egy vagy több üres karaktert ír le a beviteli adatfolyamban, amelyek a következő karaktereket tartalmazzák: szóköz, '\t', '\n', '\v', '\f'. A scanf függvény kihagyja a null karaktereket a bemeneti adatfolyamban.

A formátumkarakterláncban lévő literális karaktereknek a % karakter kivételével pontosan ugyanazok a karakterek kell megjelenniük a bemeneti adatfolyamban. Ha nincs ilyen karakter, a scanf leállítja a bevitelt. A scanf függvény kihagyja a szó szerinti karaktereket.

Általában a bemeneti formátum specifikációja a következő:

%[*] [szélesség] [módosítók] típus

A '*' karakter hézagot jelöl a specifikáció által meghatározott mezőbe való belépéskor;

- "width" a jelen specifikáció által beírható karakterek maximális számát határozza meg;

A típus a következő értékeket veheti fel:

c egy karaktertömb,

s – karakterlánc, a karakterláncokat üres karakterek választják el,

d egy előjeles egész szám 10 s/s sebességgel,

i egy előjeles egész szám, a számrendszer az első két számjegyen alapul,

u egy előjel nélküli egész szám 10 s/s-ban,

o egy előjel nélküli egész szám 8 s/s sebességgel,

x, X egy előjel nélküli egész szám 16 s/s sebességgel,

e, E, f, g, G - lebegő szám,

p egy mutató egy mutatóra,

n egy egész számra mutató mutató,

A […] beolvasott karakterek tömbje, például .

Ez utóbbi esetben csak a szögletes zárójelbe tett karakterek kerülnek be a bemeneti adatfolyamból. Ha a szögletes zárójelben lévő első karakter '^', akkor csak azokat a karaktereket írja be, amelyek nem szerepelnek a tömbben. A tömbben lévő karakterek tartományát a '-' karakter határozza meg. Karakterek beírásakor a bevezető üres karakterek és a karakterlánc befejező nullbájtja is beírásra kerül.

A módosítók a következő értékeket vehetik fel:

h egy rövid egész szám,

l, L - hosszú egész vagy lebegő szám,

és csak egész számokhoz vagy lebegőpontokhoz használatosak.

A következő példa a scanf függvény használati eseteit mutatja be. Ne feledje, hogy a formátummeghatározó előtt egy szóköz szerepel, mielőtt lebegő számot írna be.

#beleértve

printf("Adjon meg egy egész számot: ");

scanf("%d", &n);

printf("Vigyél be egy duplát: ");

scanf(" %lf", &d);

printf("Vigyél be egy karaktert: ");

scanf(" %c", &c);

printf("Adjon meg egy karakterláncot: ");

scanf("%s", &s);

Vegye figyelembe, hogy ebben a programban a lebegőpontos szám inicializálódik. Ez azért történik, hogy a fordító tartalmazzon egy könyvtárat, amely támogatja a lebegő számokkal való munkát. Ha ez nem történik meg, a lebegő szám beírásakor hiba történik futás közben.

A konzol formázott kimenetéhez használja a függvényt

int printf (const char *formátum, ...);

amely siker esetén a kimeneti egységek számát, kudarc esetén pedig EOF-t adja vissza. A format paraméter egy formátum karakterlánc, amely a kimeneti formátum specifikációit tartalmazza. A formátum karakterláncot követő argumentumok számának és típusának meg kell egyeznie a formátum karakterláncban megadott kimeneti formátum specifikációinak számával és típusával. Általában a kimeneti formátum specifikációja a következő:

%[zászlók] [szélesség] [.precíziós] [módosítók] típus

- A „zászlók” különböző szimbólumok, amelyek meghatározzák a kimeneti formátumot;

- a 'width' a jelen specifikáció által kiadott karakterek minimális számát határozza meg;

- A „.precision” a kiírandó karakterek maximális számát határozza meg;

- a „módosítók” meghatározzák az argumentumok típusát;

- A 'type' az argumentum típusát adja meg.

A következő kimeneti formátum az előjeles egész számok nyomtatására szolgál:

%[-] [+ | tér] [szélesség] [l] d

- – igazítás balra, alapértelmezés szerint – jobbra;

+ - a '+' jel jelenik meg, vegye figyelembe, hogy negatív számok esetén mindig a '-' jel látható;

„szóköz” – szóköz jelenik meg a karakter helyén;

d az adattípus int.

Előjel nélküli egész számok kiadásához a következő kimeneti formátumot kell használni:

%[-] [#] [szélesség] [l]

# - a 8 c/c-es számok kezdő 0-ját, a 16 c/c-es számoknál a kezdő 0x-ot vagy 0X-et jeleníti meg,

l – hosszú adattípus módosító;

u egy egész szám 10c/c-ben,

o egy egész szám 8 c/c-ben,

x, X egy egész szám 16 c/c-ben.

A lebegőpontos számok megjelenítéséhez a következő kimeneti formátumot kell használni:

%[-] [+ | szóköz] [szélesség] [.pontosság]

A "pontosság" a tizedesvessző utáni számjegyek számát jelenti f, e és E formátum esetén, vagy a jelentős számjegyek számát g és G formátum esetén. A számokat kerekítik. Az alapértelmezett érték hat tizedesjegy pontosság;

f egy fixpontos szám,

e egy szám exponenciális formában, a kitevőt "e" betű jelöli,

E egy szám exponenciális formában, a kitevőt "E" betű jelöli,

g az f vagy g formátumok közül a legrövidebb,

A G a legrövidebb az f vagy G formátumok közül.

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

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

1.4. String formázás.

A scanf és a printf függvényeknek vannak olyan változatai, amelyeket karakterláncok formázására terveztek, és ezeket sscanf-nek, illetve sprintf-nek nevezik.

int sscanf (const char *str, const char *formátum, ...);

adatokat olvas be az str paraméter által megadott karakterláncból a format paraméter által megadott formátum karakterláncnak megfelelően. Siker esetén a beolvasott adatmennyiséget, sikertelenség esetén az EOF-t adja vissza. Például,

#beleértve

char str = "a 10 1,2 Karakterlánc Nincs bemenet";

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

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

printf("%d\n", n); // nyomatok: 10

printf("%f\n", d); // nyomatok: 1.200000

printf("%s\n", s); // kiírja: String

int sprintf (char *puffer, const char *formátum, ...);

formázza a karakterláncot a format paraméterben megadott formátumnak megfelelően, és az eredményt a pufferkaraktertömbbe írja. A függvény a pufferkaraktertömbbe írt karakterek számát adja vissza, kivéve a lezáró null byte-ot. Például,

#beleértve

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

char s = "Ez egy karakterlánc.";

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

printf("%s\n", puffer); // kiírja: c = c, n = 10, d = 1,200000, s = Ez egy karakterlánc

1.5. Karakterláncok konvertálása numerikus adatokká.

A karakterláncok numerikus adatokká konvertáló függvényeinek prototípusait az stdlib.h fejléc fájl tartalmazza, amelyet a programnak tartalmaznia kell.

Egy karakterlánc egész számmá alakításához használja a függvényt

int atoi (const char *str);

char *str = "-123";

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

Egy karakterlánc hosszú egész számmá alakításához használja a függvényt

long int atol (const char *str);

amely sikeres esetben azt az egész számot adja vissza, amelyre az str karakterláncot konvertálta, és 0-t, ha sikertelen.

char *str = "-123";

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

Egy karakterlánc duplává alakításához használja a függvényt

double atof (const char *str);

amely sikeres esetben egy double típusú lebegő számot ad vissza, amivé az str karakterlánc konvertálódik, sikertelenség esetén pedig 0-t.

char *str = "-123,321";

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

A következő funkciók hasonló műveleteket hajtanak végre, mint az atoi, atol, atof, de több funkciót biztosítanak.

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

az str karakterláncot hosszú int-vé alakítja, amit visszaad. Ennek a függvénynek a paraméterei a következő célt szolgálják.

Ha az alap argumentum 0, akkor az átalakítás az str első két karakterétől függ:

Ha az első karakter egy 1-től 9-ig terjedő számjegy, akkor a számot 10 c/c-ben kell ábrázolni;

Ha az első karakter a 0 szám, a második karakter pedig egy 1-től 7-ig terjedő szám, akkor a számot 8 c/c-ben kell ábrázolni;

Ha az első karakter 0, a második karakter pedig 'X' vagy 'x', akkor a számot 16 c/c-ben kell ábrázolni.

Ha az alap argumentum egy 2 és 36 közötti szám, akkor ez az érték lesz a számrendszer alapja, és a rendszeren túlmutató karakterek leállítják az átalakítást. A 11-től 36-ig terjedő számrendszerek az „A”-tól „Z”-ig vagy az „a”-tól „z”-ig terjedő szimbólumokat használják a számjegyek jelölésére.

Az endptr argumentum értékét az strtol függvény állítja be. Ez az érték egy mutatót tartalmaz arra a karakterre, amely leállította az str konvertálását. Az strtol függvény siker esetén a konvertált számot adja vissza, sikertelenség esetén pedig 0-t. Például

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, stop = 7

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

hasonlóan működik, mint az strtol függvény, de egy szám karakteres ábrázolását előjel nélküli hosszú int-vé alakítja.

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

egy szám szimbolikus ábrázolását duplává alakítja.

Az ebben a bekezdésben felsorolt ​​összes funkció leállítja a működését, amikor találkozik az első olyan karakterrel, amely nem illeszkedik a kérdéses szám formátumához.

Ezenkívül, ha egy szám karakterértéke meghaladja a megfelelő adattípus megengedett értéktartományát, akkor az atof, strtol, strtoul, strtod függvények az errno változó értékét ERANGE-re állítják. Az errno változó és az ERANGE állandó a math.h fejlécfájlban van definiálva. Az atof és strtod függvény HUGE_VAL, az strtol függvény LONG_MAX vagy LONG_MIN, az strtoul függvény pedig ULONG_MAX.

A nem szabványos itoa, ltoa, utoa, ecvt, fcvt és gcvt függvények használhatók a numerikus adatok karakterláncokká alakítására. De jobb a szabványos sprintf függvényt használni ezekre a célokra.

1.6. Szabványos funkciók a karakterláncokkal való munkához.

Ebben a részben a karakterláncokkal való munkavégzés függvényeit tekintjük át, amelyek prototípusait a string.h fejlécfájl írja le.

1. Húr-összehasonlítás. Az strcmp és strncmp függvények a karakterláncok összehasonlítására szolgálnak.

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

összehasonlítja az str1, str2 karakterláncokat lexikográfiailag, és -1-et, 0-t vagy 1-et ad vissza, ha str1 kisebb, egyenlő vagy nagyobb, mint str2.

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

lexikográfiailag legfeljebb az str1 és str2 karakterláncok első n karakterét hasonlítja össze. A függvény -1, 0 vagy 1 értéket ad vissza, ha az str1 első n karaktere kisebb, egyenlő vagy nagyobb, mint az str2 első n karaktere.

// karakterlánc-összehasonlítási példa

#beleértve

#beleértve

char str1 = "aa bb";

char str2 = "aa aa";

char str3 = "aa bb cc";

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

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

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

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

2. Sorok másolása. Az strcpy és strncpy függvények karakterláncok másolására szolgálnak.

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

átmásolja az str2 karakterláncot az str1 karakterláncba. Az str2 karakterlánc teljes egészében másolásra kerül, beleértve a befejező null byte-ot is. A függvény egy mutatót ad vissza az str1-re. Ha a vonalak átfedik egymást, akkor az eredmény megjósolhatatlan.

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

n karaktert másol az str2 karakterláncból az str1 karakterláncba. Ha az str2 karakterlánc kevesebb, mint n karaktert tartalmaz, akkor az utolsó null byte annyiszor kerül másolásra, ahányszor szükséges az str2 karakterlánc n karakteresre bővítéséhez. A függvény egy mutatót ad vissza az str1 karakterláncra.

char str2 = "Karakterlánc másolása.";

strcpy(str1, str2);

printf(str1); // nyomtat: Karakterlánc másolása.

4. Összekötő húrok. Az strcat és strncat függvények a karakterláncok egyetlen karakterláncba történő összefűzésére szolgálnak.

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

hozzáfűzi az str2 karakterláncot az str1 karakterlánchoz, és az str1 karakterlánc befejező nullbájtja törlődik. A függvény egy mutatót ad vissza az str1 karakterláncra.

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

n karaktert fűz össze az str2 karakterláncból az str1 karakterláncba, törli az str1 befejező nullbájtját. A függvény egy mutatót ad vissza az str1 karakterláncra. ha az str2 karakterlánc hossza kisebb, mint n, akkor csak az str2 karakterláncban szereplő karakterek kerülnek hozzáfűzésre. A karakterlánc összefűzése után az str1-hez mindig egy null byte kerül hozzáadásra. A függvény egy mutatót ad vissza az str1 karakterláncra.

#beleértve

#beleértve

char str1 = "karakterlánc";

char str2 = "katenáció";

char str3 = "Igen Nem";

strcat(str1, str2);

printf("%s\n", str1); // kiírja: String katenáció

strncat(str1, str3, 3);

printf("%s\n", str1); // kiírja: String katenáció Igen

5. Keressen egy karaktert egy karakterláncban. Az strchr, strrchr, strspn, strcspn és strpbrk függvények a karakterláncban lévő karakterek keresésére szolgálnak.

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

megkeresi a c paraméter által megadott karakter első előfordulását az str stringben. Siker esetén a függvény egy mutatót ad vissza az első talált karakterre, sikertelenség esetén pedig NULL-t.

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

megkeresi a c paraméter által megadott karakter utolsó előfordulását az str stringben. Siker esetén a függvény egy mutatót ad vissza az utoljára talált karakterre, sikertelenség esetén pedig NULL-t.

#beleértve

#beleértve

char str = "char keresés";

printf("%s\n", strchr(str, "r")); // kiírja: r keresés

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

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

az str1 első karakterének indexét adja vissza, amely nem szerepel az str2-ben.

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

az str1 első karakterének indexét adja vissza, amely az str2-ben található.

char str = "123 abc";

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

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

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

megkeresi az str1 első karakterét, amely megegyezik az str2 egyik karakterével. Siker esetén a függvény egy mutatót ad vissza az adott karakterre, sikertelenség esetén pedig NULL-t.

char str = "123 abc";

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

6. A húrok összehasonlítása. Az strstr függvény a karakterláncok összehasonlítására szolgál.

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

megkeresi az str2 karakterlánc első előfordulását (a záró null byte nélkül) az str1 karakterláncban. Siker esetén a függvény egy mutatót ad vissza a talált részkarakterláncra, sikertelenség esetén pedig NULL-t. Ha az str1 mutató nulla hosszúságú karakterláncra mutat, akkor a függvény az str1 mutatót adja vissza.

char str = "123 abc 456;

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

7. Karakterlánc elemzése tokenekké. Az strtok függvény egy karakterlánc tokenekbe történő elemzésére szolgál.

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

visszaad egy mutatót a következő tokenre (szóra) az str1 karakterláncban, ahol a token elválasztók az str2 karakterláncból származó karakterek. Ha a tokenek véget értek, akkor a függvény NULL-t ad vissza. Az strtok függvény első hívásakor az str1 paraméternek egy karakterláncra kell mutatnia, amely tokenekké lesz értelmezve, a következő hívásoknál pedig ezt a paramétert NULL-ra kell állítani. A token megtalálása után az strtok függvény egy null byte-ot ír a token után a határoló helyére.

#beleértve

#beleértve

char str = "12 34 ab cd";

p = strtok(str, " ");

printf("%s\n",p); // értékeket nyomtat egy oszlopban: 12 34 ab cd

p = strtok(NULL, " ");

8. A húr hosszának meghatározása. A strlen függvény egy karakterlánc hosszának meghatározására szolgál.

size_t strlen(const char *str);

visszaadja a karakterlánc hosszát, figyelmen kívül hagyva az utolsó null byte-ot. Például,

char str = "123";

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

1.7. A memóriával való munkavégzés funkciói.

A string.h fejlécfájl a memóriablokkokkal való munkavégzésre szolgáló függvényeket is leírja, amelyek hasonlóak a karakterláncokkal végzett munka megfelelő függvényeihez.

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

megkeresi a c által megadott karakter első előfordulását az str n bájtjában.

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

összehasonlítja az str1 és str2 első n bájtját.

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

átmásolja az első n bájtot az str1 karakterláncból az str2 karakterláncba.

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

átmásolja az első n bájtot str1-ből str2-be, biztosítva az átfedő karakterláncok helyes kezelését.

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

a c által megadott karaktert az str első n bájtjába másolja.