Simboliu eilutes

Download Report

Transcript Simboliu eilutes

Simbolių eilutės
C++ kalbos abėcėlę sudaro
• 26 lotynų abėcėlės didžiosios ir mažosios raidės;
• 10 arabiškų skaitmenų (0, 1, 2, 3, 4, ... 9);
• Specialieji simboliai:
–“,{}|[]()+-*/\;,‘<>_!&#~=%^$@.
Simbolių eilutė char[]
• Simbolių eilutes patogu laikyti char tipo
masyvuose.
• Šie masyvai aprašomi taip pat, kaip ir kitų tipų
masyvai.
char s1[10];
• Skirtumas šio masyvo tas, kad už paskutinės
reikšmės masyve įrašomas eilutės pabaigos
simbolis – nulis (‘\0’)
Simbolių eilutė char[]
Aprašant simbolių eilutę galimas ir reikšmių
priskyrimas:
char s2[] = “C++ kalba”;
char s2[12] = “C++ kalba”;
Indeksai
0
1
2
Eilutės s2[]
simboliai
C
+
Eilutės s2[12]
simboliai
C
+
3
4
5
6
7
8
9
+
k
a
l
b
a
\0
+
k
a
l
b
a
\0
10
11
Simbolių eilutės char[] funkcijos
• Analizės funkcijos – nekeisdamos eilutės randa
kokių nors eilutės parametrų reikšmes;
• Konvertavimo ir kopijavimo funkcijos –
konvertuoja eilutę arba kopijuoja ją į kitą eilutę;
• Modifikavimo funkcijos – kokiu nors būdu keičia
eilutės reikšmę.
Visos operacijos su char[] tipo masyvais
atliekamos naudojant tam tikras funkcijas.
Eilučių skaitymas ir rašymas
• Simbolių eilutėms įvesti naudojamas operatorius
>>, o išvesti <<.
• Šis operatorius priskiria kintamajam visus
simbolius iki pirmo tarpo simbolio arba iki eilutės
pabaigos simbolio “\n”;
• Jei aprašant eilutę pabaigos simbolio vieta
nebuvo numatyta ar eilutė buvo įvesta ilgesnė,
nei numatyta apraše, tuomet eilutės pabaigos
simbolis nebeįrašomas ir veiksmai su tokia eilute
tampa klaidingi arba neįmanomi.
Eilučių skaitymas ir rašymas
Įvesties failas
char eil[100];
fd >> eil;
cout << eil;
Rezultatas: Man (ar supratote kodėl?)
Norint įvesti visą simbolių eilutę,
reikia naudoti globaliąją funkciją
get();
Funkcija get() iš įvesties srauto įveda
n-1 simbolį ir palieka vietą eilutės
pabaigos simboliui “\0”
Eilučių skaitymas ir rašymas
Įvesties failas
char eil[100];
fd.get (eil, 10);
cout << eil;
Rezultatas: Man patin
Eilučių skaitymas ir rašymas
• Jei įvesties sraute yra mažiau simbolių, nei
numatyta eilutės apraše, tuomet įvestis
baigiama, aptikus pabaigos simbolį “\0”;
• Jei reikia įvesti tiek simbolių, kiek nurodyta
eilutės apraše, patogiau naudoti operatorių
sizeof, kuris apskaičiuoja kintamojo ilgį baitais:
fd.get(eil, sizeof eil);
Eilučių skaitymas ir rašymas
Pavyzdys. Funkcija iš srauto fd nukopijuoja n eilučių į srautą
fr.
void Kopijuoti (ifstream & fd, ofstream & fr, int n)
{
char E[100];
for (int i = 0; (i < n) && (!fd.eof()); i++)
{
fd.get (E, sizeof E);
fr << E << endl;
}
}
Simbolių masyvas
Pavyzdys. Simbolių nuskaitymas iš failo.
void Skaityti (char E[], int & n)
{
ifstream fd(“U1.txt”);
char E[100];
for (n = 0; !fd.eof() && n < 4; n++)
fd >> E[n];
Norint masyve laikyti visus tekste esančius
simbolius, įvedimo sakinį pakeiskite tokiu:
fd.close();
fd.get(E[n]);
}
Simbolių masyvas
Pavyzdys. Simbolių masyvo reikšmių įrašymas į failą.
void Rašyti (char E[], int n)
{
ofstream fr(“U1rez.txt”);
char E[100];
for (int i = 0; i < n; i++)
fr << E[i];
fr.close();
}
Simbolių eilučių masyvas
• Viena simbolių eilutė yra simbolių masyvas.
• Jei eilučių yra daug, patogu jas surašyti į vieną
masyvą:
char Mas[100][15] – masyve laikoma 100 eilučių po
15 simbolių.
Cout << Mas[5] << endl; - ekrane parodo 5 vietoje
esančią eilutę
Cout << Mas[2][12] << endl; - ekrane parodo 2
vietoje esančios eilutės 12-tą simbolį.
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ų kintamieji aprašomi: string eil, e1;
• Sukurtos eilutės yra tuščios. Jas aprašant galima
naudoti priskyrimą:
string eil = “Jau moku programuoti C++ kalba”;
Simbolių eilutė string
Darbui naudojame:
1) priskyrimą (=)
2) sudėtį (+)
3) lyginimą (==, !=, < ir kt.)
Pvz2.:
string s1 = “a”; s2 = “b”;
string s =“12”; char c = ‘z’;
s1 = s1 + s; s2 = s2 + c;
Ats: s1 = a12; s2 = bz;
Pvz1.:
string s1, s2;
string s =“12”;
char c = ‘z’;
s1 = s; s2 = c;
Ats: s1 = 12; s2 = z;
Simbolių eilutė string
• Operatorius >> įveda string seką iki tarpo (kaip ir char)
arba iki eilutės pabaigos simbolio ‘\n’.
• Norint įvesti dalį simbolių naudojame globalią funkciją
getline() (kaip ir char).
• Galimi š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
Simbolių eilutė string
Veiksmai
Rezultatai ekrane
string eil; // įvesties srautas
fd >> eil;
cout << eil;
Dangaus
string eil; // įvesties srautas
getline (fd , eil);
cout << eil;
Dangaus laiptelis * Andersenas
string eil; // įvesties srautas
getline (fd , eil, ‘*’);
cout << eil;
Dangaus laiptelis *
Simbolių eilutė string
string eil = “Skanus agurkas”;
cout << eil[5];
Atsakymas: s
(masyvo elementai indeksuojami pradedant nuo 0)