Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 82
Текст из файла (страница 82)
Ответы нв вопросы и решения упражнений 593 гетигп о; 4. Пользовательская функция вывода — это перегруженная оператор-функция орега1ог«о, которая передает данные класса в поток вывода. Пользовательская функция ввода — это перегруженная оператор-функция орега1ог»(), которая принимает данные класса из потока ввода. 5. ()1пс1пс)е <ьояггеаса> ияьпд пасаеярасе ясс(; с1аяя с)аое сиаг с)[9)г УУ дата хранится в виде строки: пп/с(с),'уу рпЬ11с: ггьепс) ояггеаса аорегагог« (ояггеап~ аяггеадс, с)аяе оЬ) г атаево. 1ясгеаса аорега~ог>> (1яггеакс аяггеадс, с)аяе аоЬ) ояегеат аорегаеог« (ояггеадс яяггеася, саге оь) яггеаск « оЬ.а « 'Хп'; ..егпгп евген; )ясгеагп аорегагог» ((ясгеагп Йяггеагп, с)а1е ((оЬ) собес « "Введите дату (тса/ос)/уу); я(геагп » оЬ.с1; гесцгп яггеагп; 1пг паап() с)аге оЬ; етгт»оЬ; соас «оЬ; гегигп О; 6.
Для использования манипуляторов с параметрами необходимо включить в программу заголовок <1оваа1р>. 1. Встроенными потоками являются потоки: с(п сои1 оегг с1оа Самоучитель С++ Упражнения 1. // Представление времени и даты ()1пс1пбе <1оз~геав> ((1пс1пбе <сТ1пе> пяфпд памеярасе ягс(; // Манипулятор вывода времени и даты оя1геам асс((оятгеап~ ая1геал) яггисг Тт *1оса1г; выае ~ ~; =- т.1те(ХПЫ.) ) 1оса1с = 1оса1г2ве(кд) ' ялгеае «азсг1ве (1оса1б) « епб1; гегпгп яггеаан фп~ тпафп() ( сопб « Сй « *~п'; гесыгп О; 2.
((1пс1пс(е <1ояггеап> пяфпд пал1еярасе ягс(; /1 установка шестнадцатеричного вывода с символом х // в верхнем регистре оздгеап~ кяегпех (оя~геат йзсгеап~) ( яСгеа~п.ппзеЛй(1оз::с(ес ~ 1оз::осг); зсгеатп.яесг(1оя::Ьех 1 1оя;;вррегсаяе ~ 1оя::яЬоыЬазе); есыгп ябгеап; Сброс флагов ояггеам йгеяед(оявгеап~йфяг еат) ( я~геап~.впзедг (1оз::Ьех 1 ' - в аррегсаяе 1 1оз:: зЬоыЬаяе) яТгеаа.зелг(3.оя::с(ес); гегдгп яггеаан Приложение В.
Ответы на вопросы и решений упражнений 1п( па5.п () сои~ << аегйех << 100 << '~п'; сонг « теяе~ << 100 << '~п'; гесптп 0; з. ((1пс1ис(е <1оаггеии> пя|пд патеярасе яви; // Пропуск 10 символов 1япгеаи ааИрсЬаг(1аГгеат авГгеаж) ( ,1пс 1 ) с)тат С; Еог(1=0~ 1<10; 1++) япгеат >> с; гепигп япгеатп; 1пп вафп() ( сЬаг явг(80]у сопп « "Введите несколько символов: сгп » якфрсйат » ясг; сои~ << я~в << 1 ~п ( гесигп 0; 1. // Копирование файла и вывод висла скопированньвс символов ппфпс1пое <1оаТгеавв> ((1пс1ибе <гавгааа> пяйпд патпеярасе ясс(; 1пв пайп(хпг агдс, сЬаг *агдч( 1) йй(агдс!=3) соуп « "Копирование <файл ввода> <файл вывода>1п"т гепыгп 1; 1йаГгеатв Й1п(агдв(1))р // открытие файла для ввода ойвГгеатп ЙопС(агдч(2)); // создание файла для вывода Самоучитель С++ 1Г (! йап) ( сопл « "Файл длн ввода открыть невозможно1п"> делплп 1; 1й[!Гопс) сонс « "Файл длн вывода открыть невозможно1п"; лелплл 1; с'пал с)л; дпзуопеб сснпл = О; Яп.ппвелл (уоз::вИрнв); 1! не пропускать пробелы ып11е (!Г1п.еой() ) ( б л.п >>с)л; 1Г (.'йап.еое() ) Еопс « с)л; соппс++; сонь « "Число скопированных байтов: " « сснпл « 'М'' Хап.с1ове(); Гопс.с1ове()) гегпгп О; Результат, выводимый этой программой, может отличаться от того, который выводится в каталоге, поскольку некоторые символы могут интерпретироваться иначе.
Уточним, когда считывается последовательность возврат каретки/перевод строки, она преобразуется в символ новой строки. При выводе новая строка считается одним символом, но опять преобразуется в последовательность символов возврат каретки/перевод строки. 2. () 1пс1пбе <1овстеап~> ()тпс1пбе <бзддеак> пз(пц пагпезрасе з(д; 1п1 спа1п () оЕзлкеажропс ("руопе"); 1й(!ропп) сосб « "Файл РЫОКЕ открыть невозможно~п") кеснлп 1; Самоучитель С++ (Если между словами имеется более одного пробела, то общее число слов подсчитывается программой неправильно.
Кроме этого необходимо, чтобы последним символом в файле был пробел. — Примеч. пер.) 4. Функция 1з ореп возвращает истину, если вызывающий поток связан с открытым файлом. 1В. // Копирование файла и вывод числа скопированных символов ((гпс1пбе <1озсгеап» ()1пс1иг(е <йзЕгемп> ляфпд патеярасе зсс(; 1дг тафп(гпг агдс, сваг *агдч()) гг(агдс(-3) ( соде « "Копирование: <файл ввода> <файл вывода>~п"; гесыгп 1; 1гзсгеат Хйп(агдт(1), 1оз::1п 1 доз:;шпагу) „ (( открытие файла ввода ойзт.геаи 1ои(.(агдч(2], гоя::оыг ~ гоз . "сяфпагу); /! создание файла вывода 1Г(!гфп) сонг « "Файл ввода открыть невозможно ~п"; гегпгп 1; 1Г(!Гопв) ( сонг « "Файл вывода открыть невозможно~о"; геспгп '; с'паг сй; ипягдпес( ссыпя = 0; иИ1е (!Ып.еоЕ()) гвп.дед (сй); 11 (! ~1п.еог()) йов~.рог(сЬ); соыпс++; сонг « Число скопированных байтов: " « соипг « '~п' 11п.с1озе(); 1оиг .с1озе(); Приложение В.
Ответы на вопросы и решения упражнений 599 гесцгп Оз Из. // Подсчет числа слов ()1пс1ззЫе <1озлгеап» Ф1пс1цс[е <гзггеахп» ([1пс1ибе <сощуре> пв1пд пазвеврасе з~бз 1пс за1п (1пс агдс, сваг магд'з[) ) Ы (агдс!=2) ( сов[. « "Подсчет: <файл ввода>'зп" з гебпгп 1; Ыз~геазв1п(агдзз[Ц , 1оз::1п~ 1оз:: )з1пагу) з 11'(!1п) ( соцб « "Файл ввода открыть невозззозжно~п"з геоигп 1; 1пг соппс — 0; сваг с)з; // нахождение первого символа — не пробела с[о ( 1п, дев (с)з) з )зж)з11е (1ззрасе(с)з)); ъй11е (!1п.еой'()) ( 1п.дес (с)з) з 11 (1ззрасе(с)з) ) ( соипс++) // Поиск следуюцего слова и[з11е (з.ззрасе(с)з) йз ! 1п.еоГ (,) ) зп.
де1 (с)з); сонг « "Число слов: " « соцпб « 1п. с1озе (); геспгп 0; 2. // Вывод содержимого класса ассоцпс в файл с помол(ью // пользовательской функции вывода $1пс1ис[е <1оз1жеазв> б'О 0 Самоучитель ()1пс1п<(е <йяггеат> ()1пс1пс(е <сягг1пд> па1пд папеярасе ясс(; с1аяя ассоппЬ ( 1пь сиягпвт; сЬаг пате (80); с)опЫе Ьа1апсе; рцЫ1с: ассоипг (1пг с, сЬаг *и, оопЫе Ь) ( спясппп = с; якгсру(пате, и); Ьа1апсе = Ь; 1л1епс( ояпгеат корегалог« (оясгеап авкгеат, ассоппь оЬ) ояьгеып аорегагог« (оялгеат авггеат, ассоппь оЬ) ябгеаш « оЬ.
сиагппт « яьлеат « оЬ.пате « ' ' « оЬ. Ьа1апсе; яьгеат « '~п') геспгп япгеат; 1пста1п ( ) ( ассоппь Кех (1011, "Ва1рЬ нех", 12323. 34) р ойакгеат оиг ("ассоипля", 1оя::опс 1 1оа::Ь1пагу) 1Й'(!опг) ( сонь « "Файл вывода открыть невовыожно1п" геспгп 1у сазе « вех; опс . с1ове(); геспгп 0; 9.4 1.
!! Использование функции цег() для считывания строки с пробелами ()1пс1пс)е <1ояггеат> ()1пс1ис)е <Гвггеат> пя1пд патеярасе яка; Приложение В. Ответы на вопросы и решения упражнений |в( та1п () с]заг вгг [во]; сои( « "Введите Ваше имя: сз.п,<рег(втг, 79); сои( «в(г « '~п'; гегнгп 0; Программа работает одинаково, независимо от того, какая функция используется — деФО или Ке1]]пе0. 2. // Использование функции ае(1]пеО для вывода файла на экран Шпс]иг]е <1саг еав> Нпс1ис(е <5вТгеал» ияпя пагпеврасе вМ; 1п( паап(1пг агдс, с]заг *агдам[1) 1('(агяс[=2) [ сои( « "Считывание: <имя файлаМп"; гегцгп 1; ) Ыюггеат 1п(агу т[11); 1г (11п) соне « "джайя ввода открыть невозможно'1п"; геСигп 1; сбаг агг[255]; ипз.1е (! 1п.
ео5() ) ( гп. деГ11пе (агг, 254); соаС « всг « 'М '; 1п.с1аее(); геСагп О; 1. // Вывод содержимого файла на экран в обратном порядке ()1пс1ис(е <1овггеап~» ])1пс1иг(е <Касгеатп> цяпя паптеврасе вМ; Самоучитель с++ баг 1п( тпа1п(1п~ атас, сваг +атд"т[)) дй(амадо(=2) сон~ « "Реверс: <имя файла>1п"; теспкп 1; Нз~театдп(ад~у~[1), доз:: дп1 доз::Ыпагу) ) д~(( 'и) соцс « "Файл ввода открыть невозможно1п") ге~цгп 1; сваг с)и 1опд 1; О переход в конец файла (др символа еой) 1п.зее)сд(О, доз::епсЦ; (1опд) дп.~е11д(); // выяснение количества байтов в файле д 2 х (; >а; — )( дп. зее)<д(д, доз::Ьед) 1п.
деТ (сЫ ) сон~ «с[д; дп.с1озе()) ге~цгп О; 2. // Перестановка местами символов в файле ()1пс1ийе <дозттеав> ~ 1пс1пс)е<йзт.кеат> паунд патпеврасе здФ 1пс пъадп(дпс амадо, сйав *агдч[) ) ( 1й(агдс!=2) ( сон~ << "Перестановка: <имя файла>1п"; ге~пгп 1; Открытие файла для ввода/вывода д зсгеап~1о(абдт[ 1), 1оз::дп[доз::оп~ ( доз:: Ипату) у дд (! до) ( сопс « "Файл открыть невозможно1п"; б03 Приложение В.
Ответы на вопросы и решения упражнений гегцгп 1) сЬаг сЬ1, сЬ2р 1опо з; гог(1=0) 11о.еоГ(); 1~-=2) 1о. зее)оз (1, 1оз;: Ьец); 1о.дет.(сЬ1); 1й(1о.еой()) сопгфп е; 1о.се~(сЬ2)з 1Г(1о.еоЕ()) сопгзпие; 1о.зее)с0(1, 1оз::Ьед); з.о.рнп(сЬ2); 1о. рог (сЬ1); 1о.с1озе ()' гегцгп О) 9.6 1Я. /* Вывод содержимого файла на экран в обратном порядке с контролем ошибок * ()1по1пбе <1оз~геазл> ()1пс1ц<(е <Езтгеаза> цвфпо пашеврасе з1с(; 1пс злажп(1пг агдс, сЬаг *агут()) ( 1й (агос)=2) соцс « "реверс: <имя файла>~п"; гегцгп 1; 1Гзггеапгтп(аго г( 1), 1оз:: 1п) 1оз:: Ыпагу) ) П (! 1п) соцс « "Файл ввода открыть невоэможно~п" гегцгп 1; сйаг сЬ; 1 оп с) 3.; Переход в конец файла (до символа еой) 1п.зее)сд(0, 1оз::епс()р 604 С++ Самоучитель 1г( !1п.даос(() ) ге(пгп 1; (1опс) фп.Те11д(); // выяснение количества байтов в файле 1й( ! 1п.соос(() ) ге пгп 1; — 2; аког(; з.>=01 з — ) ( 1п.