Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 144 145 146 147 148 149 < 150 > 151 152 153 154 155 156 .. 206 >> Следующая

Для сравнения целых строковых объектов удобнее всего пользоваться описанными ранее перегруженными операторами отношения. Тем не менее, если вы захотите сравнить части строк, вам понадобится функция-член сот-раге(). Ниже представлен прототип этой функции:
int compare(size_type началоf s±ze_type число,
const string іоЛье^сороіса) const;
Здесь с вызывающей строкой сравниваются число символов объекта объ-ект_строка, начиная с индекса начало. Если вызывающая строка меньше, чем объект_строка, функция compare() возвращает отрицательное значение. Если вызывающая строка больше, чем объект^строка, функция сотраге() возвращает положительное значение. Если вызывающая строка равна объекту объект_строка, возвращаемое значение функции compare() равно нулю.
Хотя объекты типа string сами по себе очень удобны, иногда у вас все же будет возникать необходимость в версии строки в виде массива символов, оканчивающихся нулем. Например, объект типа string можно использовать для образования имени файла. Однако при открытии файла вам придется задавать указатель на стандартную, оканчивающуюся нулем строку. Для решения проблемы в классе string имеется функция-член c_str(), прототип которой показан ниже:
const char *c__str() const;
Функция возвращает указатель на оканчивающуюся нулем версию строки, содержащуюся в вызывающем объекте типа string. Оканчивающаяся нулем строка не должна меняться. Кроме этого, если над объектом типа string выполнялись какие-либо другие операции, правильность выполнения функции c_str() не гарантируется.
Поскольку класс string является контейнером, в нем поддерживаются функции begin() и end(), возвращающие соответственно итератор начала и конца строки. Также поддерживается функция size(), возвращающая текущее число символов строки.
468 Самоучитель C++
1. Хотя мы уже привыкли к традиционным строкам в стиле С, в C++ класс string делает обработку строк существенно проще. Например, при работе с объектами типа string для присваивания строк можно использовать оператор —, для конкатенации строк — оператор +, а для сравнения строк — различные операторы сравнения. В следующей программе показаны эти операции.
// Короткий пример использования строкового класса #include <iostream> ttinclude <string> using namespace std;
int main ()
(
string strl("Представление строк") ; string str2("Вторая строка"); string str3;
// присваивание? строк str3 — strl;
cout << strl << "\n" << Str3 << Ti\n”;
// конкатенация двух строк str3 = strl + str2; cout « str3 « Лп";
// сравнение строк
if (str3 > strl) cout « "str3 > strlW';
if(str3 ~ strl+str2) cout <^< hstr3 - strl+str2\n";
// строковому объекту можно присвоить обычную строку strl = "Это обычная строка\пм; cout <;< strl;
// создание строкового объекта
// с помощью другого строкового объекта
string str4(strl);
cout << str4;
// ввод строки
cout << "Введите строку: 11;
сіп » str4;
cout « str4;
return 0;
)
После выполнения программы на экране появится следующее:
Представление строк Представление строк
Глава 14. Библиотека стандартных шаблонов___________________________________469
Представление строкВторая строка str3 > strl
str3 == strl+str2 Это обычная строка Это оОычная строка Введите строку: Привет
Привет
Как видите, с объектами типа string можно обращаться так же, как и со встроенными типами данных C++. Это, фактически, и есть главное достоинство строкового класса.
Отметьте простоту манипулирования со строками: для конкатенации строк используется обычный оператор +, а для их сравнения — обычный оператор >. Чтобы выполнить те же операции для оканчивающихся нулем строк в стиле С, вам пришлось бы вызывать функции strcat() и strcmp(), что, согласитесь, гораздо менее удобно. Поскольку объекты типа string можно совершенно свободно указывать в выражениях вместе с оканчивающимися нулем строками в стиле С, то никаких неприятностей от их использования в ваших программах быть не может, а выгоды, наоборот, — очевидны.
Имеется еще одна деталь, на которую следует обратить внимание в предыдущей программе: размеры строк не задаются. Объекты типа string автоматически настраиваются на хранение строк требуемой длины. Таким образом, когда вы выполняете присваивание или конкатенацию строк, размер целевой строки автоматически вырастает ровно настолько, насколько это нужно для размещения новой строки. Этот динамический аспект использования объектов типа string следует всегда принимать во внимание при выборе варианта представления строк в ваших программах. (Как уже отмечалось, стандартные оканчивающиеся нулем строки являются возможным источником нарушения границ массивов).
2. В следующей программе демонстрируются функции insert(), erase() и replace ().
// Использование функций insert О, erase () и replace ()
Предыдущая << 1 .. 144 145 146 147 148 149 < 150 > 151 152 153 154 155 156 .. 206 >> Следующая