INF2_31.pdf

(173 KB) Pobierz
Politechnika Białostocka
Wydział Elektryczny
Katedra Elektrotechniki Teoretycznej i Metrologii
Spis treści
1. Opis stanowiska ............................................................................................. 3
1.1. Stosowana aparatura ............................................................................... 3
1.2. Oprogramowanie ...................................................................................... 3
2. Wiadomości teoretyczne................................................................................ 3
2.1. Klasa string .............................................................................................. 3
2.2. Konstruktor, destruktor i operator przypisania w klasie string ................... 4
2.3. Funkcje dotyczące pamięci przeznaczonej na dane ................................. 7
2.4. Funkcje umożliwiające dostęp do pojedynczych znaków ........................ 10
2.5. Funkcje modyfikujące teksty przechowywane w obiekcie ....................... 11
2.6. Funkcje wykonujące operacje na tekstach w obiektach .......................... 16
2.7. Funkcje globalne .................................................................................... 19
Instrukcja
do pracowni specjalistycznej z przedmiotu
Informatyka 2
Kod przedmiotu:
ES1C300 016
(studia stacjonarne)
OPERACJE NA TEKSTACH W JĘZYKU C++
3. Przebieg ćwiczenia ....................................................................................... 22
4. Literatura ....................................................................................................... 23
5. Zagadnienia na zaliczenie ............................................................................ 23
Numer ćwiczenia
INF31
6. Wymagania BHP ........................................................................................... 23
_____________
Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB.
Autor:
dr inż. Jarosław Forenc
Białystok 2015
© Wydział Elektryczny, Politechnika Białostocka, 2015 (wersja 1.3)
Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana
w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw
autorskich.
Informatyka 2
2 z 24
Instrukcja INF31
Member constants
Member functions
String operation
c_str
Member functions
Modifiers
operator+=
append
push_back
assign
insert
erase
replace
swap
1. Opis stanowiska
1.1. Stosowana aparatura
Podczas zajęć wykorzystywany jest komputer klasy PC z systemem
operacyjnym Microsoft Windows (XP/Vista/7).
npos
Member functions
(constructor)
(destructor)
operator=
data
get_allocator
copy
find
rfind
find_first_of
find_last_of
find_first_not_of
find_last_not_of
substr
compare
1.2. Oprogramowanie
Na komputerach zainstalowane jest środowisko programistyczne Microsoft
Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express
Edition zawierające kompilator Microsoft Visual C++ 2008 oraz środowisko Turbo
C++ 2006 Explorer firmy Borland.
Capacity
size
length
max_size
resize
Global functions
getline
operator+
operator<<
operator>>
comparison operators
2. Wiadomości teoretyczne
2.1. Klasa string
Klasa
string
przeznaczona jest do wykonywania operacji na tekstach. Jej
zastosowanie w programie wymaga dołączenia pliku nagłówkowego
string
(bez
.h
na końcu).
#include
<string>
capacity
reserve
clear
empty
Iterators
begin
end
rbegin
rend
Element access
operator[]
at
swap
Rys. 1. Struktura klasy string
Klasa
string
jest częścią biblioteki standardowej. Wszystkie identyfikatory
w niej występujące są zadeklarowane w przestrzeni nazw
std.
Dodając
using
namespace std;
nie trzeba poprzedzać identyfikatorów kwalifikatorem zakresu
std::.
#include
<iostream>
#include
<string>
using namespace
std;
2.2. Konstruktor, destruktor i operator przypisania w klasie string
W klasie
string
stosuje się standardowy sposób definiowania obiektów.
nazwa_klasy nazwa_obiektu(argumenty konstruktora);
Konstruktor tworzy obiekt klasy oraz inicjalizuje jego dane. Sposób inicjalizacji
jest zależny od zastosowanej wersji konstruktora.
Na Rys. 1 przedstawiono strukturę klasy
string.
Informatyka 2
3 z 24
Instrukcja INF31
Informatyka 2
4 z 24
Instrukcja INF31
(constructor)
string();
cout << s1 <<
" "
<< s2 <<
" "
<< s3 <<
" ";
cout << s4 <<
" "
<< s5 << endl;
Tekst Tekst kst eks Tekst
-
konstruktor domyślny (bezargumentowy), tworzy pusty ciąg znaków;
(constructor)
string(const string & str);
string(const
char
* s);
(destructor)
~string();
-
konstruktor inicjalizujący obiekt całym tekstem zawartym w innym obiekcie
(str) lub w tablicy znaków (s);
-
destruktor usuwa obiekt zwalniając pamięć, która została przydzielona do
przechowywania jego danych;
(constructor)
string(const string & str, size_t pos, size_t n = npos);
operator=
-
konstruktor inicjalizujący obiekt fragmentem tekstu z obiektu
str,
który
rozpoczyna się od pozycji
pos
i zawiera
n
znaków (domyślna wartość
n = npos
oznacza wszystkie znaki do końca tekstu);
string &
operator
= (const string & str);
string &
operator
= (const
char
* s);
string &
operator
= (char c);
-
operator
=
przypisuje nową wartość ciągowi znaków, który jest
przechowywany w obiekcie;
-
po prawej stronie operatora może znajdować się inny obiekt klasy
string
(str), tablica znaków (s) lub jeden znak (c);
string s("ABCDEF");
string s1, s2, s3;
s1 = s;
s2 =
"123456";
s3 =
'a';
cout
cout
cout
cout
s:
s1:
s2:
s3:
<<
<<
<<
<<
"s:
"s1:
"s2:
"s3:
"
"
"
"
<<
<<
<<
<<
// przypisanie innego obiektu klasy string
// przypisanie tablicy znaków
// przypisanie jednego znaku
s
s1
s2
s3
<<
<<
<<
<<
endl;
endl;
endl;
endl;
(constructor)
string(const
char
* s, size_t n);
-
konstruktor inicjalizujący obiekt fragmentem tekstu z tablicy znaków
s
zawierającym
n
znaków;
(constructor)
string(size_t n,
char
c);
-
konstruktor inicjalizujący obiekt poprzez wpisanie
n
takich samych znaków
c;
char
tab[10] =
"Tekst";
string
string
string
string
string
s1(tab);
s2(s1);
s3(s1,2,4);
s4(tab,1,3);
s5 =
"Tekst";
//
//
//
//
//
inicjalizacja tablicą znaków
inicjalizacja innym obiektem klasy string
inicjalizacja fragmentem tekstu z obiektu s1
inicjalizacja fragmentem tablicy tab
inicjalizacja C-stringiem
ABCDEF
ABCDEF
123456
a
Informatyka 2
5 z 24
Instrukcja INF31
Informatyka 2
6 z 24
Instrukcja INF31
2.3. Funkcje dotyczące pamięci przeznaczonej na przechowywane dane
size()
string str;
cout << str.max_size() << endl;
size_t size();
4294967294
-
funkcja
size()
zwraca liczbę znaków w obiekcie (długość łańcucha znaków);
string str("12345678");
size_t d = str.size();
cout <<
"Dlugosc = "
<< d << endl;
Dlugosc = 8
resize()
void
resize(size_t n);
void
resize(size_t n,
char
c);
-
funkcja
resize()
zmienia długość tekstu przechowywanego w obiekcie na
n
znaków;
-
jeśli
n
jest mniejsze niż aktualna długość tekstu, to skraca tekst pozostawiając
tylko
n
pierwszych znaków;
-
jeśli
n
jest większe niż aktualna długość tekstu, to dodaje na końcu miejsce
na nowe znaki; miejsce to wypełniane jest znakiem
c
lub (jeśli nie został on
podany) bajtem zerowym (znakiem
null
- ’\0’);
string s("123456789");
cout << s << endl; s.resize(5);
cout << s << endl; s.resize(15,'*');
cout << s << endl;
123456789
12345
12345**********
length()
size_t length();
-
funkcja
length()
działa tak samo jak funkcja
size()
- zwraca liczbę znaków
w obiekcie (długość łańcucha znaków);
string str("12345678");
size_t d = str.length();
cout <<
"Dlugosc = "
<< d << endl;
Dlugosc = 8
max_size()
size_t max_size();
capacity()
-
funkcja
max_size()
zwraca maksymalną liczbę znaków, które mogą być
przechowywane w obiekcie;
-
liczba ta wynika z ograniczeń implementacyjnych klasy
string
lub ograniczeń
systemowych;
size_t capacity();
-
funkcja
capacity()
zwraca bieżący rozmiar zarezerwowanej pamięci do
przechowywania tekstu w obiekcie;
-
zarezerwowana pamięć może być równa lub większa od liczby znaków
aktualnie przechowywanych w obiekcie; większa liczba znaków umożliwia
optymalizację operacji podczas dodawania nowych znaków;
Informatyka 2
7 z 24
Instrukcja INF31
Informatyka 2
8 z 24
Instrukcja INF31
string str("12345678");
cout << str.capacity() << endl;
15
0-><-
2.4. Funkcje umożliwiające dostęp do pojedynczych znaków tekstu
at()
char
& at(size_t pos);
reserve()
void
reserve(size_t n=0);
-
funkcja
at()
umożliwia odwołanie do znaku o indeksie
pos
przechowywanym
w obiekcie (znaki numerowane są od
0);
-
błędnie podany indeks powoduje wystąpienie wyjątku
out_of_range;
string str("Napis
testowy");
for
(int i=0; i<str.size(); i++)
cout << str.at(i);
Napis testowy
-
funkcja
reserve()
żąda zarezerwowania określonego rozmiaru pamięci do
przechowywania tekstu w obiekcie;
-
argument
n
określa minimalny rozmiar, który będzie zarezerwowany
(w rzeczywistości może on być większy);
string str;
str.reserve(100);
cout << str.capacity() << endl;
111
operator[]
empty()
char
&
operator
[ ] (size_t pos);
bool
empty();
-
operator
[ ]
umożliwia odwołanie do znaku o indeksie
pos
przechowywanym
w obiekcie (znaki numerowane są od
0);
-
nie przeprowadza kontroli poprawności indeksu
pos;
string str("Napis
testowy");
-
funkcja
empty()
zwraca wartość
true
jeśli obiekt jest pusty (liczba znaków
tekstu wynosi
0);
clear()
void
clear();
for
(int i=0; i<str.size(); i++)
cout << str[i];
Napis testowy
-
funkcja
clear()
usuwa tekst przechowywany w obiekcie;
string str("12345678");
if
(!str.empty()) str.clear();
cout << str.size() <<
"->"
<< str <<
"<-"
<< endl;
Informatyka 2
9 z 24
Instrukcja INF31
Informatyka 2
10 z 24
Instrukcja INF31
Zgłoś jeśli naruszono regulamin