|
Программирование >> Дополнительные возможности наследования
в строке 6 объявляется символьная переменная ch, а в строке 7 пользова-- телю предлагается ввести строку текста. Назначение этой программы со- стоит в том, чтобы заменить все встречающиеся во введенной строке восклицательные знаки (!) знаком доллара ($) и удалить все символы (#). Цикл while в теле функции main() профаммы прокручивается до тех пор, пока не будет возвращен символ конца файла (вводится комбинацией клавиш <Ctrl+C> в Windows или <Ctrl+Z> и <Ctrl+D> в MS DOS и UNIX соответственно). (Не забывайте, что функция Cin.getO возвращает О в конце файла.) Если текущий символ оказывается восклицательным знаком, он отбрасывается, а в поток ввода функцией putback() возвращается символ $. Если же текущий символ не является восклицательным знаком, он выводится на экран. Если текущий символ оказывается #, то он пропускается функцией ignoreO. Указанный подход далеко не самый эффективный способ решения подобных задач (более того, если символ # будет расположен в начале сфоки, то профамма его пропустит). Но наша основная цель состояла в том, чтобы продемонсфировать работу функций putbackO и IgnoreO. Впрочем, их использование достаточно просто и понятно. примечание Методы реекО и putbackO обычно используются для синтаксического анализа строк. Необходимость в нем возникает, например, при создании компилятора. Вывод данных с помощью coot Ранее вы уже использовали объект cout вместе с перефуженным оператором вывода ( ) для выведения на экран строк, чисел и других данных. Этот объект позволяет также форматировать данные, выравнивать столбцы и выводить числовые значения в десятичном и шестнадцатеричном формате. Как это сделать, вы узнаете далее. Очистка Оуфера вывода Вы, вероятно, уже заметили, что использование endl приводит к очистке буфера вывода. Этот оператор вызывает функцию-член flushO объекта cout, которая и осуществляет очистку буфера. Вы можете напрямую вызывать метод flushO, либо вызвав функцию-член flushO, либо написав следующее выражение: cout << flush Указанный метод позволяет явно очистить буфер вывода на тот случай, если не вся информация из него была выведена на экран. Фднкцои-члвны объекта coot Аналогично тому, как мы обращались к методам объекта cin: get() и getline(), с объектом cout можно использовать функции put() и write(). Функция put О выводит один символ на стандартное устройство вывода. Так как эта функция возвращает ссылку на ostream, а cout является объектом ostream, есть возможность последовательного обращения к функции put() для вывода ряда значений, как и при вводе данных. Реализация этой возможности показана в листинге 16.10. Aucmuuz IB.10. ИспоАьзоваиие функции put () Листинг 16.10. Использование putO ftinclude <iostreaiii.h> int main() { cout. put ( H ).put( e ) -putc r ), putC 1 )-put( 0 )-put(\ n ); return 0; } Hello ПРИМЕЧАНИЕ При запуске этой программы некоторые компиляторы не выведут заданное спово Hello. Если эта проблема коснется и вас, просто пропустите этот листинг и идите дальше. Строку 6 можно представить следующим образом: функция cout. put( И) выводит букву и на экран и возвращает объект cout. Оставшуюся часть выражения можно представить следующим образом: cout. put(e). putC 1 ) PutC Г ) put(o ). put(\ n); Выводится буква e, после чего остается cout. put( 1). Таким образом, повторяется цикл, на каждом этапе которого выводится следующая бука и возвращается объект cout. После вывода последнего символа ( \п) выполнение функции завершается. Функция writeO работает так же, как и оператор ввода (<<), но она принимает параметр, указывающий максимальное количество выводимых символов. Использование этой функции показано в листинге 16.11. Аисшинг IB.11. ИспокьзоваипЕ фуикцпи write() 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Листинг 16.11. Использование write() ftinclude <iostream,h> #include <string.h> int main() { char 0ne[] = One if by land ; int fullLength = strlen(One) int tooShort = fullLength -4 int tooLong = fullLength + 6 cout.write(0ne,fullLength) \ n ; 17 18 19 cout.write(One,tooShort) \ n cout.write(One,tooLong) \ n ; return 0; One if by land One if by One if by land 1?! ПРИМЕЧАНИЕ Ha вашем компьютере последняя строка вывода может выглядеть иначе. В строке 7 создается массив символов для заданной строки текста. Длина введенного текста присваивается в строке 11 целочисленной переменной fullLength. Установленное значение переменной tooShort меньше этой длины на четыре единицы, а значение переменной tooLong больше на шесть. В строке 15 с помошью функции write() выводится вся строка, поскольку в качестве первого параметра функции задается полная длина текстовой строки. Строкой 16 вновь выводится строка, однако длина ее на четыре символа меньше, что и отражается в выводе. Еше один вывод данных выполняется в строке 17, однако в этом случае функция writeO выводит на шесть символов больше. После заданной строки на экране появятся символы, расположенные в ячейках памяти, следующих за ячейками массива символов. Манипуляторы, флаги и команды форматирования Поток вывода поддерживает установку большого количества флагов состояния, определяющих основание чисел (десятичное или шестнадцатеричное), ширину полей вывода и символы, используемые для заполнения полей. Флаг состояния представляет собой байт информации, каждый бит которого имеет специальное предназначение. Установка двоичных флагов более детально рассматривается на занятии 21. Для установки флагов потока ostream можно использовать функции-члены и манипуляторы. Использованнв функции coHt.widthH По умолчанию ширина поля вывода автоматически устанавливается такой, чтобы точно вместить все символы строки из буфера вывода. Но с помощью функции widthO можно установить точное значение ширины поля вывода. Эта функция вызывается как метод объекта cout, поскольку является его функцией-членом. Функция WidthO изменяет ширину только следующего поля вывода. Использование этой функции проиллюстрировано в листинге 16.12.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |