Слайд 2Строки
Стандартная библиотека C++ включает стандартный готовый класс string в заголовочном файле string.
#include
using namespace std;
Класс string автоматически управляет памятью для строк, определяет большое количество удобных операций и методов.
Слайд 3Конструкторы строк
Создание пустой строки
string()
Создание строки на основе нуль-терминальной строки
string(const char* s)
Создание строки
на основе первых n символов нуль-терминальной строки
string(const char* s, int n)
Конструктор копирования
string(string& s)
Слайд 4Пример использования конструкторов
string s1;
string man("Ivanov");
string dog("Sharik - is a good dog", 6);
string
s2(man);
cout << s1 << endl;
cout << man << endl;
cout << dog << endl;
cout << s2 << endl;
Слайд 5Присвоение строк
Присвоение строки типа string
string operator=(const string& s);
Присвоение нуль-терминальной строки
string operator=(const char*
s);
Присвоение символа
string operator=(char c);
Слайд 6Пример использования конструкторов и присвоения
string s1, s2, s3;
s1 = "Hacker";
s2 = s1;
s3
= '$';
cout << s1 << endl;
cout << s2 << endl;
cout << s3 << endl;
Слайд 7Методы получения характеристик строк
size_type – тип размера, как правило unsigned long
Слайд 8Пример
string s = "Pink Floyd";
cout << "length = " << s.length() <<
endl;
cout << "size = " << s.size() << endl;
cout << "max_size = " << s.max_size() << endl;
cout << "capacity = " << s.capacity() << endl;
if (!s.empty())
cout << "is not empty!!!" << endl;
Слайд 10Замечания об индексировании
Символы строки индексируются от 0 до length()-1
Для индексирования строк
также существует метод
char& at(size_type index);
В отличие от [] он контролирует выход индекса за границу диапазона и при необходимости генерирует стандартное исключение out_of_range
Слайд 11Пример
string s1, s2, s3;
cout << "Enter s1 =" << endl;
cin >> s1;
cout
<< "Enter s2 =" << endl;
cin >> s2;
s3 = s1 + s2;
cout << "s1 + s2 = " << endl;
cout << s3 << endl;
if (s1 == s2)
cout << "s1 == s2" << endl;
else if (s1 < s2)
cout << "s1 < s2" << endl;
else
cout << "s1 > s2" << endl;
for (int i = 0; i < s1.length(); i++) {
s1[i]++;
cout << s1[i] << endl;
}
Слайд 12Методы присвоения строк
Первый и третий метод эквивалентны использованию операции =
Слайд 13Пример
char os[] = "Carlson";
string ns = "Kid";
string s1, s2, s3, s4;
s1.assign(ns); //s1
= ns;
s2.assign(ns, 1, 2); //1 - pos, 2 – n
s3.assign(os); //s3 = os;
s4.assign(os, 4); //4 – n
cout << s1 << endl << s2 << endl << s3 << endl << s4 << endl;
Слайд 15Пример
char os[] = "Carlson";
string ns = "Kid";
string ls = "Romeo loves Juliet";
string
s;
s.append(ns);
s.append(ls, 5, 7); //5 - pos, 7 – n
s.append(os);
s.append(" very much thank you (c)Master Yoda", 10); //10 - n
cout << s << endl;
Слайд 17Пример
char os[] = "lies";
string ns = "every";
string ns1 = "unknown body was
on the floor";
string s = " ";
s.insert(0, ns);
s.insert(5, ns1, 8, 4);
s.insert(s.length(), os);
s.insert(s.length(), "(c) House M.D. I'm too handsome to do paperwork.", 15);
cout << s << endl;
Слайд 18Методы удаления
Метод удаления n символов строки начиная с позиции pos
erase(size_type pos
= 0,
size_type n = npos)
если n не указано – удаляются символы до конца строки
Метод очистки строки
clear()
Слайд 19Пример
string s = "1qwanza1234maydan";
s.erase(1, 10); //1 - pos, 10 – n
s.erase(4); //4
- pos, n = npos
cout << s << endl;
s.erase(); //pos = 0, n = npos
cout << s << endl;
Слайд 20Метод получения подстроки
Получение подстроки длины n, начиная с позиции pos
string substr(size_type
pos = 0,
size_type n = npos) const;
Если n не указывается, то возвращается подстрока из всех символов до конца вызывающей строки
Слайд 21Пример
string s = "foxy hare is very smart";
string u, w;
u = s.substr(5,
4);
w = s.substr(s.length() - 5);
cout << w << " " << u << endl;
Слайд 23Пример
string u = "slonik";
string w = "the muhacker";
string s = "muha -
slonik";
s.replace(0, 4, u);
s.replace(9, 6, w, 4, 4);
cout << s << endl;
Слайд 24Методы поиска подстрок
Метод нахождения позиции первого (левого) вхождения подстроки s в вызывающую
строку. Поиск производится, начиная с позиции pos.
size_type find(const string& s,
size_type pos = 0)const;
Возвращаемое значение – индекс вхождения, если нет ни одного вхождения, то возвращается npos.
Метод нахождения позиции последнего (правого) вхождения подстроки. pos определяет позицию, до которой происходит поиск
size_type rfind(const string& s,
size_type pos = npos)const;
Слайд 25Пример
string s = "two tea. two two";
string u = "two";
cout << s.find(u,
0) << endl;
cout << s.find(u, 3) << endl;
cout << s.rfind(u) << endl;
Слайд 26Методы сравнения
int compare(const string& s) const;
int compare(size_type pos1,
size_type n1,
const string& s,
size_type pos2,
size_type n2) const;
Возвращаемое значение интерпретируется также, как у функции stcmp
Слайд 27Пример
string s = "aabb";
string u = "aabc";
cout << s.compare(u) << endl;
cout <<
s.compare(0, 2, u, 0, 2) << endl;
Слайд 28Дополнительные методы
Получение нуль-терминальной строки
const char* c_str() const;
Обмен строк
swap(string& s)
Слайд 29Пример
string s1 = "Children of men";
string s2 = "Saving Private Ryan";
char os[1000];
strcpy(os,
s1.c_str());
cout << os << endl;
s1.swap(s2);
cout << s1 << endl << s2 << endl;