Mezei tanár számítástechnika és az IKT - az első sorban c, és a karakter tömbök

Vonósok a C ++ és a karakter tömbök

Vonalak dolgozunk szinte mindenki a programot, és hogy ezt a leckét. Pontosabban string állandók - karaktersor idézőjelek. Gyakran kellett megjeleníteni bizonyos információkat. Például:

Szöveg idézőjelben egy szöveg konstans. Idézőjelek használják, hogy meghatározzák a kezdetét és végét egy string konstans és részben nem.

Tehát az első: a C ++ tárolására húrt karakter tömbök. Ez ugyanaz a tömböket már tárgyalt a cikket tömbök C ++, de nem tárolja a numerikus adatokat, és a karakter. El lehet képzelni, a karakterek a tömb sorozat szomszédos memória sejtek - minden sejt üzletek egy szimbólum, és elfoglalja egy bájt. Egy byte, mert minden eleme a karakter tömb típusú char. Az utolsó karakter minden egyes sor egy szimbólum \ 0 (null karaktert). Például:


Maga a szöveg, a szóközzel, áll 11 karakter. Ha az utolsó cella tetszik. (Point), nem null karakter \ 0 - fordítóprogram már nem egy vonal. És meg kell dolgozni ezzel a különféle karakterek lenne, mint a szokásos sor - írja az egyes sejt külön-külön jelenik meg karakterenként (loop):
#include
using namespace std;

int main ()
setlocale (LC_ALL, "Rus");

A (int i = 0; i <12; i++)
cout <>
cout <


Szerencsére, C ++ van egy sokkal kényelmesebb módon inicializálni és a hozzáférést a karakter tömbök - szálakat. Ehhez az utolsó karaktert a tömb legyen null karakter \ 0. Ő az, aki teszi a karakterkészlet karakterlánc dolgozni, ami sokkal egyszerűbb, mint egy sor karakter.

Kijelenti sorban oly módon - hozzon létre egy sor char, méret szögletes zárójelben opcionális (ez számít a fordító), az üzemeltető = és írjuk be a kívánt szöveget idézőjelek. Ez azt jelenti, inicializálni egy sor szöveg konstans:
#include
using namespace std;

int main ()
setlocale (LC_ALL, "Rus");

char str [] = "egyszer egy kutya"; // '\ 0' implicit

cout <

Előírja a null karakter nem szükséges. Jelen van hallgatólagosan és ezt hozzáadjuk minden húr állandó automatikusan. Így annak ellenére, hogy azt látjuk, 11 karakter soronként, a tömb mérete 12, mint a \ 0 karaktert, és elfoglalja egy bájtot. Elveszi az utolsó cella a karakter tömbben. Mint látható, a kimenet a képernyőn elég megszólítani megnevezés: cout <

Szeretném felhívni a figyelmet, hogy a különbség a karakter konstans (ezen belül egyetlen idézetek -. „F” „@”) egy karakterlánc konstans ( „f” idézőjelek „@”.). Az első, C ++ fordító van allokálva egy byte tárolására memóriában. A rögzített karakter idézőjel, két byte kerül kiosztásra a memóriát - a saját és a zéró jel (hozzá a fordító).

Mi van, ha a vonal figyelmezteti a felhasználót a billentyűzet? Ebben az esetben szükség van egy tömböt típusú char jelzi méretének megfelelő tárolására a bemeneti karakter, beleértve a \ 0. Ne felejtsük el, hogy a null karaktert. Ha kell tárolni a 3 karakter a tömbben, a mérete legyen az egyik nagyobb - azaz 4.

using namespace std;


Segítségével üres idézetek inicializálás, hozzárendelünk egy értéket minden egyes eleme a tömb \ 0. Így a sor törlődik a „szemetet” más programok. Még ha a felhasználó beír egy nevet tartalmazó kevesebb karakter neve után egy \ 0. Ezzel elkerülhető a felesleges hibákat. Ennek emlékére vonal nézne ki:


Mellesleg, ha azt feltételezzük, felülírja a 11-edik cella a tömb - Str [11] = „\ 0”;


és megjelenik egy tömb a képernyőn látjuk csak purecodecpp annak ellenére, hogy a sejtek 12, 13, 14 karakter tárolták. Nullkarakteres fog jelentős szerepet játszanak abban, hogy a képernyőre, és minden, ami nem jelenik meg.

Beszéljen üzembe a sorokat a billentyűzet részletesen. Az a tény, hogy vannak problémák, hogy tisztában legyenek, és hogy meg kell tanulni kezelni. Az alábbi program nem olyan sima vonalat, amikor belép, ahogy mi akarjuk:

#include
using namespace std;

int main ()
setlocale (LC_ALL, "Rus");

char idézet [128] = "";

cout <<"Ваша любимая цитата из мультфильма "Винни Пух": ";
cin >> idézet;
cout <


Ne fáradj még mit bemenet cin kell végezni latinul. Körülbelül hogyan kell helyesen bevezetni a cirill ábécé lesz szó egy külön cikket. Itt láthatjuk, hogy az idézetet vezettünk be, de a kimenet a képernyőn látjuk csak az első szót. Ez annak a ténynek köszönhető, hogy nem adja meg a null karaktert a billentyűzeten, de cin érzékeli a teret, új sor vagy lap, mint az a sor végére. Ez azt jelenti, ebben az esetben, CIN olvassa csak az első szó, a vessző és a hozzáadott automatikusan bejegyzi a sor végére. A többi bejegyzés kerül a beviteli sorban.

Ez a probléma egyszerűen megoldható. A C ++, vannak funkciók get () és getline (). hogy tudjuk használni a cin. Ezek hasonlóak, de gyakrabban használják getline (). Ebben a cikkben, azt nem tekintjük a különbség közöttük. Töltse ki a programot bemenet getline ():
#include
using namespace std;

int main ()
setlocale (LC_ALL, "Rus");

char idézet [128] = "";

cout <<"Ваша любимая цитата из мультфильма "Винни Пух": \n";
cin.getline (idézet, 128); // át a függvény neve a tömb mérete
cout <


Láthatjuk, hogy az általunk zárójelben a két érv funkció - az, hogy mi tekinthető jelképe array (array neve) és a tömb méretét - egy sor 11. Az eredmény megfelel számunkra - minden helyesen jelennek meg. cin.getline () beolvassa az egész sort a tömbben beleértve terek és lapok, amíg egy Enter megnyomásával, vagy addig, amíg a tömb mérete meghaladja. újsor karaktert a tömb nem kerül mentésre, és helyébe egy null karakter.

Kapcsolódó cikkek