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

Тут можно читать онлайн Д. Стефенс - C++. Сборник рецептов - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство КУДИЦ-ПРЕСС, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C++. Сборник рецептов
  • Автор:
  • Жанр:
  • Издательство:
    КУДИЦ-ПРЕСС
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    5-91136-030-6
  • Рейтинг:
    3.9/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

C++. Сборник рецептов - описание и краткое содержание, автор Д. Стефенс, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

C++. Сборник рецептов - читать книгу онлайн бесплатно, автор Д. Стефенс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

years присутствует 2 раз.

years, присутствует 1 раз.

Обратите внимание, что точки в конце слов рассматриваются как части слов. Скорее всего, вам потребуется с помощью функций проверки символов из и изменить определение слова так, чтобы оно означало только буквенно-цифровые символы, как это сделано в рецепте 4.17.

Смотри также

Рецепт 4.17 и табл. 4.3.

4.19. Добавление полей в текстовый файл

Проблема

Имеется текстовый файл, и в нем требуется сделать поля. Другими словами, требуется сдвинуть обе стороны каждой строки, содержащей какие-либо символы, так, чтобы длина всех строк стала одинаковой.

Решение

Пример 4.28 показывает, как добавить в файл поля с помощью потоков, stringи шаблона функции getline.

Пример 4.28. Добавление полей в текстовый файл

#include

#include

#include

#include

using namespace std;

const static char PAD_CHAR = '.';

// addMargins принимает два потока и два числа. Потоки используются для

// ввода и вывода. Первое из двух чисел представляет

// ширину левого поля (т.е. число пробелов, вставляемых в

// начале каждой строки файла). Второе число представляет

// общую ширину строки.

void addMargins(istream& in, ostream& out,

int left, int right) {

string tmp;

while (!in.eof()) {

getline(in, tmp, '\n'); // getline определена

// в

tmp.insert(tmp.begin(), left, PAD_CHAR);

rpad(tmp, right, PAD_CHAR); // rpad из рецепта

// 4.2

out << tmp << '\n';

}

}

int main(int argc, char** argv) {

if (argc < 3)

return(EXIT_FAILURE);

ifstream in(argv[1]);

ofstream out(argv[2]);

if (!in || !out)

return(EXIT_FAILURE);

int left = 8;

int right = 72;

if (argc == 5) {

left = atoi(argv[3]);

right = atoi(argv[4]);

}

addMargins(in, out, left, right);

out.close();

if (out)

return(EXIT_SUCCESS);

else

return(EXIT_FAILURE);

}

Этот пример делает несколько предположений о формате входного текста, так что внимательно прочтите следующий раздел.

Обсуждение

addMarginsпредполагает, что ввод выглядит примерно так.

The data is still inconclusive. But the weakness

in job creation and the apparent weakness in

high-paying jobs may be opposite sides of a coin.

Companies still seem cautious, relying on

temporary workers and anxious about rising health

care costs associated with full-time workers

Этот текст содержит переносы в позиции 50 символов (см. рецепт 4.16) и выровнен по левому краю (см. рецепт 4.20). addMarginsтакже предполагает, что требуется, чтобы вывод выглядел подобно следующему, который использует для обозначения полей вместо пробелов точки.

.......The data is still inconclusive. But the weakness..............

.......in job creation and the apparent weakness in..................

.......high-paying jobs may be opposite sides of a coin..............

.......Companies still seem cautious, relying on.....................

.......temporary workers and anxious about rising health.............

.......care costs associated with full-time workers..................

По умолчанию левое поле содержит восемь символов, а общая длина строки составляет 72 символа. Конечно, если известно, что входной текст будет всегда выровнен по левому или правому краю, то можно просто дополнить оба конца каждой строки таким количеством символов, которое требуется. В любом случае логика очень проста. Многие методики, используемые в этом рецепте, уже описывались (потоки, дополнение string), так что я не буду здесь на них останавливаться. Единственная новая функция здесь — это getline.

Если требуется прочитать сразу целую строку текста или, более точно, прочитать текст до определенного разделителя, используйте шаблон функции getline, определенный в , как это сделано в примере 4.28.

getline(in, tmp, '\n');

getlineчитает символы из входного потока и добавляет их в tmpдо тех пор, пока не встретится разделитель '\n', который в tmpне добавляется. basic_istreamсодержит метод с таким же именем, но с другим поведением. Он сохраняет свой вывод в символьном буфере, а не в string. В данном случае я решил использовать преимущества метода из string, так как мне не хотелось читать строку в символьный буфер, а затем копировать ее в string. Таким образом, я использовал getlineв версии string.

Смотри также

Рецепты 4.16 и 4.20.

4.20. Выравнивание текста в текстовом файле

Проблема

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

Решение

Используйте потоки и стандартные флаги форматирования потоков rightи left, являющиеся частью ios_base, определенного в . Пример 4.29 показывает, как они работают.

Пример 4.29. Выравнивание текста

#include

#include

#include

#include

using namespace std;

int main(int argc, char** argv) {

if (argc < 3)

return(EXIT_FAILURE);

ifstream in(argv[1]);

ofstream out(argv[2]);

int w = 72;

if (argc == 4)

w = atoi(argv[3]);

string tmp;

out.setf(ios_base::right); // Указать потоку на

// выравнивание по правому краю

while (!in.eof()) {

out.width(w); // Сбросить ширину после

getline(in, tmp, "\n"); // каждой записи

out << tmp << '\n';

}

out.close();

}

Этот пример принимает три аргумента: входной файл, выходной файл и ширину выровненного по правому краю текста. Входной файл может иметь следующий вид.

With automatic download of Microsoft's (Nasdaq:

MSFT) enormous SP2 security patch to the Windows

XP operating system set to begin the industry

still waits to understand its ramifications. Home

users that have their preferences set to receive

operating system updates as they are made

available by Microsoft may be surprised to learn

that some of the software they already run on

their systems could be disabled by SP2 or may run

very differently.

Вывод будет иметь следующий вид.

With automatic download of Microsoft's (Nasdaq:

MSFT) enormous SP2 security patch to the Windows

XP operating system set to begin the industry

still waits to understand its ramifications. Home

users that have their preferences set to receive

operating system updates as they are made

available by Microsoft may be surprised to learn

that some of the software they already run on

their systems could be disabled by SP2 or may run

very differently.

Второй пример текста выровнен по правому краю и имеет в ширину 50 символов.

Обсуждение

Шаблон класса ios_baseсодержит большое количество флагов форматирования числовых и текстовых данных, читаемых из потоков или записываемых в них. Два флага, управляющих выравниванием текста, — это rightи left. Они являются static const-членами ios_baseи имеют тип fmtflags(который зависит от реализации). Все это хозяйство определено в .

Чтобы установить флаги форматирования, используйте ios_base::setf. Она объединяет переданные в нее и уже установленные ранее флаги потока с помощью операции OR (ИЛИ). Например, эта строка включает выравнивание по правому краю:

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

Интервал:

Закладка:

Сделать


Д. Стефенс читать все книги автора по порядку

Д. Стефенс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге C++. Сборник рецептов, автор: Д. Стефенс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x