Programavimo pamokėlės

pamokelesm

Mokymų ciklas „Programavimo pamokėlės" skirtos visiems, kurie nori išmokti programuoti.

IT galvosūkiai

itgalvosukiai

Konkurso tikslas – skatinti moksleivius domėtis IT sprendžiant įvairiausius galvosūkius.

Informikas

informikasm

Konkurso tikslas – supažindinti moksleivius su menu informacinėse technologijose ir mūsų talismanu.

Dr. J. P. Kazicko konkursai

kkonkursai

Žemaitijos, Aukštaitijos, Suvalkijos ir Dzūkijos regionuose vykdomas IT konkursas.

       

Simbolių eilutė string

 

Darbui su simbolių eilutėmis yra sukurta klasė (tipas) string. Failas, kuriame yra aprašyta klasė string, į programą įterpiamas sakiniu

#include <string>

Simbolių eilučių tipo kintamieji (objektai) aprašomi taip pat, kaip ir kitų tipų kintamieji, pavyzdžiui,

string eil, e1;

Sukurtos eilutės yra tuščios. Jas aprašant galima priskirti reikšmes, pavyzdžiui,

string eil = "Jau moku programuoti C++ kalba";

Klasės string objektai literatūroje dažnai vadinami C++ eilutėmis. Eilučių simboliai indeksuojami taip pat, kaip ir masyve, t. y. pradedant 0. Darbui su eilutėmis yra naudojami tokie operatoriai:

1) Priskyrimo (=).

Klasės string objektui galima priskirti kitos eilutės ar net simbolio reikšmę. Pavyzdžiui:

string s1, s2;

string s = "12";

char c = 'z';

s1 = s; s2 = c;

Rezultatas – s1 reikšmė ("12") ir s2 reikšmė ("z").

2) Sudėties (+).

Sudedant eilutes s1 ir s2, prie pirmos eilutės pabaigos pridedama antros eilutės kopija. Galima sudėti dvi C++ eilutes arba C++ eilutę ir simbolį. Pavyzdžiui:

string s1 = "a", s2 = "b";

string s = "12"; char c = 'z';

s1 = s1 + s; s2 = s2 + c;

Rezultatas – s1 reikšmė ("a12") ir s2 reikšmė ("bz").

3) Lyginimo (==, != , < ir kt.).

Lyginami eilutes sudarančių simbolių kodai. Dvi eilutės lygios, jei jos yra vienodo ilgio ir sutampa visų jų simbolių kodai poromis. C++ eilutę galima lyginti tik su kita C++ eilute.

Klasės string objektams (kintamiesiems) galima taikyti įvesties srauto operatorių >> ir išvesties srauto operatorių <<.

Operatorius >> įveda į string tipo eilutę simbolių seką iki tarpo arba iki eilutės pabaigos simbolio '\n'.

Pavyzdžiui, jei įvesties sraute fd yra simbolių eilutė „Man patinka C++ programavimo kalba“ tai, atlikę veiksmus

string eil;

fd >> eil; // fd – įvesties srautas

cout << eil;

ekrane matysime eilutę:

Man

Norint įvesti dalį simbolių eilutės (pvz., ne iki tarpo), reikia naudotis globaliaja funkcija getline(). Galimi du šios funkcijos formatai:

istream & getline(istream & fd, string & str); // įveda iki eilutės pabaigos simbolio ‘\n’

istream & getline(istream & fd, string & eil, char skyr); // įveda iki skyriklio simbolio skyr

Tarkime, faile fd yra eilutė

Dangaus laiptelis * Andersenas

 

Pavyzdys. Veiksmai ir jų rezultatai, rodomi ekrane.

 

string eil;

fd >> eil; // fd – įvesties srautas

cout << eil;

Rezultatai ekrane: Dangaus

string eil;

getline(fd, eil); // fd – įvesties srautas

cout << eil;

Rezultatai ekrane: Dangaus laiptelis * Andersenas

string eil;

getline(fd, eil, '*'); // fd – įvesties srautas

cout << eil;

Rezultatai ekrane: Dangaus laiptelis

 

Išvesties srauto operatorius << išveda string tipo eilutę eil:

fr << eil;

Skaitydami tekstą, prarandame eilutės pabaigos simbolį '\n', todėl reikia rašyti:

fr << eil << endl;

Pavyzdžiui, iš srauto fd nukopijuoti n eilučių į srautą fr galima naudojantis šia funkcija:

void KopijuotiSrautoEilutes(ifstream & fd, ofstream & fr, int n)

{

   string E;

   for (int i = 0; (i < n) && (!fd.eof()); i++) {

      getline(fd, E);

      fr << E << endl;

   }

}

Jei norima iš C++ eilutės paimti atskirus simbolius, tuomet laužtiniuose skliaustuose reikia nurodyti jų indeksus.

Pavyzdžiui, turime eilutę:

string eil = "Skanus agurkas";

Tuomet sakiniu cout << eil[5]; ekrane parodysime eilutės simbolį s, kuris masyve yra 5-oje vietoje (masyvo elementai indeksuojami pradedant nuo 0).

Klasės string funkcijos, dažnai naudojamos darbui su eilutėmis

Funkcijos prototipas Paaiškinimai
size_type max_size() const;

Grąžina elementų, kurie gali būti eilutėje, skaičių.

Pavyzdys

string s("C++ kalba"); int n = s.max_size();

Rezultatas – n reikšmė: 4294967281.

size_type length() const;

Grąžina eilutės ilgį (simbolių skaičių eilutėje).

Pavyzdys

string s("C++ kalba");

int n = s.length();

Rezultatas – n reikšmė: 9.

const char * c_str();

Grąžina rodyklę-konstantą į C eilutę, kurios reikšmė sutampa su eilute, kuriai taikoma ši funkcija. Naudojama failų atidarymo sakiniuose.

Pavyzdys

string s = "Duomenys.txt";

ifstream fd(s.c_str());

Rezultatas – eilutė s, konvertuota į C eilutę.

string substr(size_type k,

size_type n = npos);

Iš eilutės, kuriai taikoma ši funkcija, kopijuojama n simbolių, pradedant k-uoju.

Pavyzdys

string s = "Programavimo kalba C++";

string s1 = "Matematika";

s1 = s.substr(13, 5);

Rezultatas – nauja eilutės s1 reikšmė: "kalba".

Į viršų