Не представляет особого труда перейти от обычных строковых потоков к широким. Перепишем пример из листинга 14.16, использовав широкие потоки и символы кириллицы (листинг 14.25).
Листинг 14.25. Широкие строковые потоки
#include <iostream> #include <sstream> #include <locale> using namespace std; int main()
{ char s[] = "computer", с = 'L';
int i = 35;
float fp = 1.7320534f;
wostringstream os; // установка русского контекста для строкового потока и для вывода
os.imbue(locale("rus_rus.866"));
Листинг 14.25 (продолжение)
wcout.imbue(locale("rus_rus.866")); /* Форматирование и вывод данных */ os << 1_"Строка: " << s << L"; "
<< 1_"Символ: " << с << L"; "
<< 1_"Целое: " << i << L"; "
<< 1_"Дробное: " << fp<< L"; "
<< endl;
wcout << 1_"Вывод:" << endl << os.str() << endl;
wcout << 1_"Количество символов=" << os. str (). lengthO << endl;
return EXIT_SUCCESS;
}
Для того чтобы осуществлять вывод по-русски, мы использовали широкие строковые константы и установили русский контекст для строкового потока и для стандартного выходного потока. Выводимый на экран результат выполнения программы:
Вывод:
Строка: computer; Символ: L; Целое: 35; Дробное: 1,73205; Количество символов=59
Обратите внимание, что ни строку «computer», ни символ «L» мы не стали писать в широком виде — все прекрасно сработало и так.
Упражнения:
6. Реализовать очередь нуждающихся в улучшении жилищных, условий. Элементом очереди является структура с полями фамилии, количества членов семьи и даты постановки в очередь. Для реализации поля даты использовать упрощенную версию класса Date (см. упражнение 4 в главе 2). Реализовать операцию поиска элемента по фамилии. Реализовать операцию объединения двух очередей (если очередник есть в обеих — включать только один раз).
7. Реализовать стек символов в виде односвязного списка. Использовав этот стек, написать функцию реверсирования массива символов.
8. Реализовать класс Li stPerson (см. упражнение 10 в главе 4) с использованием списка, аналогичного TDeque.
9. Реализовать класс Money (см. упражнение 4 в главе 4), использовав список в качестве динамического контейнера.
10. Реализовать класс Poli пот (см. упражнение 5 в главе 4), разработав вложенный класс односвязного списка.
11. Реализовать стек символов в виде двусвязного списка. Использовав этот стек, написать функцию, проверяющую правильность задания скобок в строке символов.
21. Что происходит, если функция нарушает спецификацию исключений?
22. Учитывается ли спецификация исключений при перегрузке функций?
23. Отличается ли функция с «пустой» спецификацией th row () от функции, у которой отсутствует спецификация исключений?
24. Что такое «стандартные» исключения? Назовите два-три типа стандартных исключений.
25. Поясните «взаимоотношение» исключений и деструкторов.
26. Объясните, зачем может понадобиться подмена стандартных функций завершения.
27. Может ли конструктор генерировать исключение? А деструктор?
28. Какие виды нестандартных исключений вы знаете?
29. В чем отличие механизма структурной обработки исключений Windows от стандартного механизма?
30. Какие стандартные функции можно подменить, и каким образом это делается? |