Д. Стефенс - C++. Сборник рецептов

Здесь есть возможность читать онлайн «Д. Стефенс - C++. Сборник рецептов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C++. Сборник рецептов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C++. Сборник рецептов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C++. Сборник рецептов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

insertи append— это методы шаблона класса basic_string, описанного в заголовочном файле ( string— это typedefдля basic_string, a wstring — это typedefдля basic_string), так что они работают как для строк из узких, так и широких символов. Их использование по мере необходимости, как в предыдущем примере, прекрасно работает, но при использовании методов basic_stringв собственных вспомогательных функциях общего назначения эти функции следует создавать, используя общий существующий дизайн стандартной библиотеки и шаблоны функций. Рассмотрим код примера 4.1, который определяет общий шаблон функции pad, который работает для строк типа basic_string.

Пример 4.1. Общий шаблон функции pad

#include

#include

using namespace std;

// Общий подход

template

void pad(basic_string& s,

typename basic_string::size_type n, T c) {

if (n > s.length())

s.append(n - s.length(), c);

}

int main() {

string s = "Appendix A";

wstring ws = L"Acknowledgments"; // "L" указывает, что

// этот литерал состоит из

pad(s, 20. "*"); // широких символов

pad(ws, 20, L'*');

// cout << s << std::endl; // He следует пытаться выполнить это

wcout << ws << std::endl; // одновременно

}

padв примере 4.1 дополняет данную строку sдо длины n, используя символ c. Так как шаблон функции использует параметризованный тип элементов строки ( T), он будет работать для basic_stringиз любых символов: char, wchar_tили любых других, определенных пользователем.

4.2. Обрезка строк

Проблема

Требуется обрезать несколько символов в конце или начале строки, обычно пробелов.

Решение

Для определения позиции строки, которую требуется удалить, используйте итераторы, а для ее удаления — метод erase. Пример 4.2 показывает функцию rtrim, которая удаляет символ в конце строки.

Пример 4.2. Обрезка символов строки

#include

#include

// Подход для строк из узких символов

void rtrim(std::string& s, char с) {

if (s.empty()) return;

std::string::iterator p;

for (p = s.end(); p != s.begin() && *--p == c;);

if (*p != c) p++;

s.erase(p, s.end());

}

int main() {

std::string s = "zoo";

rtrim(s, 'o');

std::cout << s << '\n';

}

Обсуждение

Пример 4.2 выполняет все необходимое для строк длины char, но работает только для них. Аналогично тому, что показано в примере 4.1, можно использовать общий дизайн basic_stringи шаблон функции. Пример 4.3 использует для удаления символов в конце строки любого типа шаблон функции.

Пример 4.3. Обобщенная версия rtrim

#include

#include

using namespace std;

// Общий подход к обрезке отдельных

// символов строки

template

void rtrim(basic_string& s, T с) {

if (s.empty()) return;

typename basic_string::iterator p;

for (p = s.end(); p != s.begin() && *--p == c;);

if (*p != c) p++;

s.erase(p, s.end());

}

int main() {

string s = "Great!!!!";

wstring ws = L"Super!!!!";

rtrim(s, '!');

rtrim(ws, L'!');

cout << s << '\n';

wcout << ws << L'\n';

}

Эта функция работает точно так же, как и предыдущая, необобщенная версия из примера 4.2, но так как она параметризована по типу символов, она будет работать для basic_stringлюбого типа.

Примеры 4.2 и 4.3 удаляют из строки последовательность одного символа. Однако обрезка пробелов выглядит по-другому, так как пробельный символ может быть представлен одним из нескольких символов. Для удобства стандартная библиотека предоставляет простейший способ справиться с этим: функцию isspaceиз заголовочного файла (и ее wchar_t-эквивалент iswspaceиз ). Пример 4.4 определяет общую функцию, которая обрезает концевые пробелы.

Пример 4.4. Удаление концевых пробелов

#include

#include

#include

#include

using namespace std;

template

void rtrimws(basic_string& s, F f) {

if (s.empty()) return;

typename basic_string::iterator p;

for (p = s.end(); p ! = s.begin() && f(*--p););

if (!f(*p))

p++;

s.erase(p, s.end());

}

// Перегрузка для облегчения вызовов в клиентском коде

void rtrimws(string& s) {

rtrimws(s, isspace);

}

void rtrimws(wstring& ws) {

rtrimws(ws, iswspace);

}

int main() {

string s = "zing ";

wstring ws = L"zong ";

rtrimws(s) rtrimws(ws);

cout << s << "|\n";

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C++. Сборник рецептов»

Представляем Вашему вниманию похожие книги на «C++. Сборник рецептов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C++. Сборник рецептов»

Обсуждение, отзывы о книге «C++. Сборник рецептов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.