Чтение онлайн

на главную - закладки

Жанры

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

Когсуэлл Джефф

Шрифт:

format f(" Имеется %1% способа, %2% %3% %4%");

В строке формата заполнители — это числа, обрамленные с обеих сторон символами %. Затем я начинаю передавать в объект содержимое указанного формата.

f % 3;

f % "чтобы" % "это" % "сделать;

Оператор

%
в библиотеке форматирования был переопределен так, чтобы добавлять указанные в нем переменные в левую часть объекта
format
. Его можно использовать как один раз на строку, так и несколько раз в одной строке. Он аналогичен оператору
<<
для строк. Что же касается оператора
<<
, он также был переопределен так, что объекты
format
можно непосредственно записать в выходной поток. Кроме того, если требуется поместить результаты в строку, используйте функцию-член
str
.

string s = f.str;

Если же вам нравится

printf
, то можно использовать форматную строку
printf
.

f.parse("Это стоит $%d.*");

f % 50;

Если будет записано слишком много или слишком мало переменных для указанного формата, то при попытке записать строку в поток или извлечь отформатированную строку будет выброшено исключение

format_error
(или подкласс
thereof
).

Класс

format
достаточно мощен и содержит слишком много возможностей форматирования, чтобы их можно было описать здесь, и его стоит изучить. Чтобы скачать Boost или почитать документацию, посетите web-сайт Boost по адресу www.boost.org.

Также для преобразования чисел из числовых типов в строки можно использовать

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

Смотри также

Глава 10.

3.3. Проверка, содержит ли строка допустимое число

Проблема

Имеется строка

string
и требуется определить, содержит ли она допустимое число.

Решение

Для проверки допустимости числа можно использовать шаблон функции

lexical_cast
библиотеки Boost. При таком подходе допустимое число может включать предшествующий знак минус, предшествующий знак плюс, но не пробел. В примере 3.5 приводятся несколько образцов типов форматов, с которыми работает
lexical_cast
.

Пример 3.5. Проверка числовой строки

#include <iostream>

#include <boost/lexical_cast.hpp>

using namespace std;

using boost::lexical_cast;

using boost::bad_lexical_cast;

template<typename T>

bool isValid(const string& num) {

 bool res = true;

 try {

T tmp = lexical_cast<T>(num);

 } catch (bad_lexical_cast &e) {

res = false;

 }

 return(res);

}

void test(const string& s) {

 if (isValid<int>(s))

cout << s << " -
допустимое целое число." << endl;

 else

cout << s << " - HE допустимое целое число." << endl;

 if (isValid<double>(s))

cout << s << " - допустимое число двойной точности." << endl;

 else

cout << s << " - HE допустимое число двойной точности." << endl;

 if (isValid<float>(s))

cout << s << " - допустимое число одинарной точности." << endl;

 else

cout << s << " - HE допустимое число одинарной точности " << endl;

}

int main {

 test("12345");

 test("1.23456");

 test("-1.23456");

 test(" - 1.23456");

 test("+1.23456");

 test(" 1.23456 ");

 test("asdf");

}

Вот вывод этого примера.

12345 - допустимое целое число.

12345 - допустимое число двойной точности.

12345 - допустимое число одинарной точности.

1.23456 - НЕ допустимое целое число.

1.23456 - допустимое число двойной точности.

1.23456 - допустимое число одинарной точности.

– 1.23456 - НЕ допустимое целое число.

– 1.23456 - допустимое число двойной точности.

– 1.23456 - допустимое число одинарной точности.

– 1.23456 - НЕ допустимое целое число.

– 1 23466 - НЕ допустимое число двойной точности.

– 1.23456 - НЕ допустимое число одинарной точности.

+1.23456 - НЕ допустимое целое число.

+1.23456 - допустимое число двойной точности.

+1.23456 - допустимое число одинарной точности.

 1.23456 - НЕ допустимое целое число.

 1.23456 - НЕ допустимое число двойной точности.

 1.23456 - НЕ допустимое число одинарной точности.

asdf - НЕ допустимое целое число.

asdf - НЕ допустимое число двойной точности.

Поделиться:
Популярные книги

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Жатва душ. Остров мертвых

Сугралинов Данияр
Фантастика:
боевая фантастика
рпг
5.20
рейтинг книги
Жатва душ. Остров мертвых

Сердце Дракона. Том 9

Клеванский Кирилл Сергеевич
9. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.69
рейтинг книги
Сердце Дракона. Том 9

Как я строил магическую империю 6

Зубов Константин
6. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 6

Леди для короля. Оборотная сторона короны

Воронцова Александра
3. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Леди для короля. Оборотная сторона короны

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4

АллатРа

Новых Анастасия
Научно-образовательная:
психология
история
философия
обществознание
физика
6.25
рейтинг книги
АллатРа

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Дорога к счастью

Меллер Юлия Викторовна
Любовные романы:
любовно-фантастические романы
6.11
рейтинг книги
Дорога к счастью

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

Николай I Освободитель. Книга 2

Савинков Андрей Николаевич
2. Николай I
Фантастика:
героическая фантастика
альтернативная история
5.00
рейтинг книги
Николай I Освободитель. Книга 2

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального