Megtalálása részkarakterláncként a húr, purecodecpp

Megtalálása részkarakterláncként a húr, purecodecpp
Most Nézzük a példát nézhet alsztringjeként kereső algoritmus egy sorban. Példák alapján a standard könyvtári funkciókat, akkor ezekben a funkciót, mind a kényelem az írás programokat. De a klasszikus elemzési algoritmus alapján ciklusok és összehasonlítások is figyelemre méltó. Ezért figyelembe vesszük azt az ugyanabba az osztályba.

algoritmus is nagyon egyszerű elv. Két sor. Pl: "Hello world" és a "lo"

Fog működni két ciklusban:

  1. Az első menetben elvégzi az összes húr, és keresse meg a kívánt helyet az első karakterlánc ( „lo”).
  2. Másodszor, kezdve az első betű talált álláspontja - ellenőrizze, hogy melyik betű utána, és hányan vannak azonos a sorban.

Hadd illusztráljam a keresési karaktersorozat:

Megtalálása részkarakterláncként a húr, purecodecpp

Az első két iteráció a ciklus képest betűket nem egyeznek (piros). A harmadik iteráció a kívánt betű (az első karakter a kívánt szót) egybeesett a karakterhez, hogy kiegyenlített. Ha az ilyen véletlen benne van a második ciklusban működését. Úgy tervezték, hogy számolja meg a karakterek az első a keresési karakterláncot, amely egyezik a karaktereket az eredeti szöveg. Ha ezek közül a karakterek nem ugyanaz - loop kilép. Semmi értelme, hogy hajt a ciklus hulladék, miután az első ellentmondás, mert egyértelmű, hogy a kívánatos itt.

A harmadik iteráció kiegyenlített csak az első karakter a húr, de a második nem ugyanaz. Mi lesz az első ciklus folytatódik. A negyedik iteráció adja a kívánt eredményt - ugyanaz, mint az összes karaktert a keresési szövegben egy része az eredeti szöveg. És ha az összes karakter a sorban - Substring talált. algoritmus művelet elvégezhető legyen.

Lássuk, mi úgy néz ki, mint egy klasszikus részsztring keresési kódot egy karakterlánc C ++:

Keresés töredékszó

Két ciklust végezni minden feladatát. Egy trappolt a sorban a reményben, hogy „fej” keresőszót (az első karakter). A második megkérdezi, hogy létezik után található a „fej”, „test” a cím. Ezenkívül ellenőrzi, hogy ez a „test” a sor végére. Ie nem található, ha a szó hossza eggyel több, mint a szükséges vonal hosszát, mivel a Null terminátor ( „\ 0”) kerül a készülék.

Látjuk, hogy a program megtalálta az elején a részsztring pa a sejtekben a karakter tömb 0 indexű és 4. Miért? Végtére is, egy szót parapapa 3. részkarakterláncként. Minden az ügy „\ 0”.

További információ a

Az a tény, hogy a karakterek C-húrok alatt a karakter tömbben. Minden sor jellemzi az úgynevezett ASCIIZ tulajdon. A rövidítés szó szerinti fordítása a „string, hogy véget ér a karakter a kód nulla” - nulla Ascl.

A fogás, hogy ha a keresés a sor végére, szükséges, hogy figyelembe vegyék nulla. Ez is része a vonal, és ez az algoritmus is egybeesik a végén a húr.

Például sort: „Emlékezz Harry számú szoba” és a „szoba” ténylegesen kinézni „Emlékezz Harry számú szoba \ 0” és „szoba \ 0”. Ahol '\ 0'. karaktert a 0 kóddal, amely azt mondja, hogy a húr véget ért. Mellesleg ez a megközelítés, és lehetővé teszi, hogy írjon ilyen ciklus, mint:

Ha azt akarjuk, hogy megtalálják a szót szobában. Állandó a szó közepén, meg kell csak összehasonlítani 4 karakter, de ha hirtelen kell megfelelniük csak a végén - nem kellene összehasonlítani 4 karakter, és ... 5. Vagy nézze meg, hogy miután a null terminátor. Ez nem nagy ügy. Ez a vonal, csak meg kell szokni.

Általában értelmében az algoritmus vége. Nincs több nehézséggel, mint nulla, a sor végén van. Azonban, meg kell figyelni, hogy a sok keresést. Mi van, ha meg kell találni a vonal több pozícióban? Hányszor keresési kifejezés előfordul a sorban, és mely helyeket? Ez az, amit az a célja, hogy ellenőrizzék a harmadik paraméter - int n - az előfordulások számát a húr. Ha tesz egy ott - ott találja az első előfordulása a címet. Ha a két, akkor, hogy az első ciklusban kihagyja az első talált, és keresni egy másik. Ha a három - keresni a harmadik, és így tovább. Minden keresőszót találtam, ez a számláló értéke események. Ez lehetővé teszi, hogy leírja a keresést a ciklusban: