Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 82
Текст из файла (страница 82)
Пользовательская функция ввода — это перегруженная оператор-функция operator»(),которая принимает данные класса из потока ввода.5. ^include <iostream>using namespace std;class date {char d[9]; // дата хранится в виде строки: mm/dd/yypublic:friend ostream &operator« (ostream sstream, date ob) ;friend istream ^operator» (istreara sstream, date &ob) ;};ostream &operator« (ostream sstream, date ob){stream « ob.d « '\n';return stream;istream ^operator» (istream fistream, date fiob){cout « "Введите дату (mm/dd/yy) : ";stream » ob.d;return stream;int mainO{date ob;cin » ob;cout « ob;return 0;6. Для использования манипуляторов с параметрами необходимо включить впрограмму заголовок <iomanip>.7. Встроенными потоками являются потоки:cincoutcereclog594Самоучитель C++Упражнения9.11. // Представление времени и даты^include <iostream>tinclude <ctime>using namespace std;// Манипулятор вывода времени и датыostreara &td(ostream &stream){struct tm *localt;time_t t;t = time(NULL);localt = localtime(St);stream «asctime (localt) « endl;return stream;}int main{){cout « td « '\n';return 0;2.
^include <iostream>using namespace std;// Установка шестнадцатеричного вывода с символом X//в верхнем регистреostrearn &sethex (ostream Sstream)istream.unsetf(ios::dec | ios::oct);stream.setf(ios::hex I ios::uppercase | ios::showbase);return stream;}// Сброс флаговostream sreset(ostream fistream){stream, unsetf (ios : :hex I ' - "- • : uppercase I ios: : showbase) ;stream.setf(ios::dec);return stream;}Приложение В. Ответы на вопросы и решений упражненийint main (){cout « sethex « 100 « '\n';cout « reset « 100 « '\n';return 0;3.
^include <iostream>using namespace std;// Пропуск 10 символовistream sskipchar(istream «stream)int i;char c;for{i=0; i<10; i++) stream » c;return stream;int main()char atr[80];cout « "Введите несколько символов: ";cin » skipchar » str;cout « str « '\n';return 0;}9.21. // Копирование файла и вывод числа скопированных символовttinclude <iostream>^include <fstream>using namespace std;int main{int argc, char *argv[ ])tif(argc!=3) {cout « "Копирование <файл_ввода> <файл_вьшода>\п";return 1;}ifstream fin{argv[l]); // открытие файла для вводаofstream fout(argv[2]); // создание файла для вывода595596___Самоучитель C++if(!fin) (cout « "Файл для ввода открыть невозможно\п";return 1;}if (! fout) {cout « "Файл для вывода открыть невозможной";return 1;>char ch;unsigned count = 0;fin.unsetf (ios: :skipws) ; // не пропускать пробелыwhile (Ifin.eof 0 ) {fin » ch;if (Ifin.eof () ) {fout « ch;count++;cout « "Число скопированных байтов: " « count « '\n';fin.
closed ;fout .close {) ;return 0;Результат, выводимый этой программой, может отличаться от того, которыйвыводится в каталоге, поскольку некоторые символы могут интерпретироваться иначе. Уточним, когда считывается последовательность возврат каретки/перевод строки, она преобразуется в символ новой строки. При выводеновая строка считается одним символом, но опять преобразуется в последовательность символов возврат каретки/перевод строки.2. ^include <iostream>#include <fstream>using namespace std;int main (}{of stream pout ("phone") ;ifUpout) {cout « "Файл PHONE открыть невозможной";return 1;Приложение В. Ответы на вопросы и решения упражненийpout « "Иссак Ньютон, 415 555-3423\п";pout « "Роберт Годдард, 213 555-2312\п";pout « "Энрико Ферми, 202 555-1111\п";pout.close();return 0;3.
// Подсчет числа слов^include <iostream>^include <fstream>^include <cctype>using namespace std;int main (int argc, char *argv[]){if(argc!=2) {cout « "Подсчет слов: <файл_ввода>\пreturn 1;ifstream in(argv[ 1 ]);cout « "Файл ввода открыть невозможно\п"return 1 ;int count = 0;char ch;in » ch; // нахождение первого символа — не пробела// Теперь пробелы пропускать нельзяin.unsetf (ios: iskipws) ; // не пропускать пробелыwhile ( ! in.eof {) ) (in » ch;if (isspace (ch) ) (count++;while {isspace (ch) && ! in.eof (}) in » ch;cout « "Число слов : " « count « ' \n ' ;in.
close {};return 0;597598Самоучитель C++__(Если между словами имеется более одного пробела, то общее число словподсчитывается программой неправильно. Кроме этого необходимо, чтобыпоследним символом в файле был пробел. — Примеч. пер.)4. Функция is_open возвращает истину, если вызывающий поток связан с открытым файлом.9.31а. // Копирование файла и вывод числа скопированных символов# include <iostream>^include <fstream>using namespace std;int rnain(int argc, char *argv[])if(argc!=3) {cout « "Копирование: <файл_ввода> <файл__вывода>\п";return 1;}ifstream fin(argv[l], ios::in I ios : :binary) ;// открытие// файла вводаofstrearn fout (argv[2] , ios::out | ios : :binary) ; // создание// файла выводаif{!fin) (cout « "Файл ввода открыть невозможно \n";return 1;»iff! fout) {cout « "Файл вывода открыть невозможной";return 1;char ch;unsigned count = 0;while (Ifin.eof (} ) (fin.
get (ch) ;if ( Ifin.eof {) }fout. put (ch) ;count++;cout « "Число скопированных байтов: " « count « '\n';fin. closed ;fout .close () ;Приложение1В.Ответынавопросыирешенияупражненийreturn 0;lb. // Подсчет числа слов#include <iostream>#include <fstream>^include <cctype>using namespace std;int main (int argc, char *argv[]){if (argc!=2) {cout « "Подсчет: <файл_авода>\п";return 1;)if stream in{argv[l] , ios: :in | ios : : binary) ;if('in) {cout « "Файл ввода открыть невозможно \п";return 1;}int count — 0;char ch;// нахождение первого символа — не пробелаdo {in. get (ch) ;} while (isspace (ch) } ;while ( lin.eof (} } {in. get (ch) ;if (isspace (ch) ) {count ++;// Поиск следующего словаwhile (isspace (ch) && lin.eof () ) in.
get (ch) ;cout « "Число слов: " « count « '\n';in. close () ;return 0;2. // Вывод содержимого класса account в файл с помощью// пользовательской функции вывода^include <iostream>__599600_______Самоучитель^include <fstream>^include <cstring>using namespace std;class account {int custnum;char name[80] ;double balance;public :account (int c, char *n, double b){custnum = c;strcpy(name, n) ;balance = b;}friend ostream &operator« (ostream sstream, account ob) ;>'ostream &operator« {ostream Sstream, account ob)tstream « ob. custnum « ' ';stream « ob.name « ' ' « ob.
balance;stream « '\n' ;return stream;int main ( ){account RexflOll, "Ralph Rex", 12323.34);ofstream out ("accounts", ios::out I ios: :binary) ;if (lout) fcout « "Файл вывода открыть невозможной"return 1;•}out « Rex;out .close {) ;return 0;9.41. // Использование функции get() для считывания строки с пробелами^include <iostream>^include <fstream>using namespace std;C++Приложение В. Ответы на вопросы и решения упражнений601int main()char str [80];cout « "Введите Ваше имя: ";cin.get (str, 79);cout « str « ' \ n ' ;return 0;Программа работает одинаково, независимо от того, какая функция используется — get() или getlineO2.
// Использование функции getlineO для вывода файла на экранttinclude <iostream>^include <fstream>using namespace std;int main(int argc, char *argv[]){if{argc!=2) {cout « "Считывание: <имя__файла>\п";return 1;ifstreara in(argv[l]);cout « "Файл ввода открыть невозможной";return 1;char str[255];while(lin.eof()) {in.getline(str, 254);cout « str « '\n';Jin.closeO ;return 0;I9.51. // Вывод содержимого файла на экран в обратном порядке^include <iostream>^include <fstream>using namespace std;602______Самоучительint main(int argc, char *argv[]){if(argc!=2) {cout « "Реверс: <имя_файла>\п";return 1;}if stream in (argv [ 1 ] , ios : : in I ios : : binary) ;if(!in) {cout « "Файл ввода открыть невозможно \п";return 1;char ch;long i;// переход в конец файла (до символа eof)in.seekg(0, ios::end);i = (long) in.tellgO; // выяснение количества байтов в файлеi4-—=s £,9 f•for(; i>=0; i~) {in.seekg(i, ios::beg);in.get(ch);cout <<; ch;in.
close {) ;return 0;2. // Перестановка местами символов в файле^include <iostream>ttinclude <fstream>using namespace std;int main(int argc, char *argv[]){if(argc!=2) {cout « "Перестановка: <имя_файла>\п";return 1;// Открытие файла для ввода/выводаf stream io(argv[ 1 ] , ios; :in 1 ios : :out | ios: : binary) ;cout « "Файл открыть невозможно\п";C++Приложение В. Ответы на вопросы и решения упражненийreturn 1;}char chl, ch2;long i;for(i=0; !io.eof(); i+=2) {io.seekg (i, ios::beg);io.get(chl);if(io.eof()) continue;io.get(ch2);if(io.eof()) continue;io.seekg(i, ios::beg);io.put(ch2);io.put(chl);}io.close (};return 0;9.6la./* Вывод содержимого файла на экран в обратном порядке с контролемошибок*/^include <iostream>^include <fstream>using namespace std;int main(int argc, char *argv[]){if (argc!=2) (cout « "Реверс: <имя_файла>\п";return 1 ;if stream in (argv [ 1 ] , ios : : in | ios : : binary) ;if(!in) fcout « "Файл ввода открыть невозможно \п" ;return 1 ;char ch;long i;// Переход в конец файла (до символа eof)in.
seekg(0, ios: :end) ;603604_Самоучительif { ! i n . g o o d ( ) } return 1;i = (long) in.tellgO; // выяснение количества байтов в файлеif ( ! in. good О ) return 1;i -= 2;for(; i>=0; i — } {in.seekg (i, ios : :beg) ;if ( ! in. good () ) return 1;in. get (chj ;if { ! in. good {) ) return 1;cout « ch;in. close () ;if ( ! in. good{) } return 1;return 0;1Ь. // Перестановка местами символов в файле с контролем ошибокftinclude <iostream>^include <fstream>using namespace std;int main(int argc, char *argv[]){. if (argc!=2) {cout « "Перестановка: <имя_файла>\п";return 1 ;// Открытие файла для ввода/выводаf stream io (argv [ 1 ] , ios : : in | ios : : out i ios : : binary) ;if(!io) {cout « "Файл открыть невозможно\п";return 1;char chl, ch2;long i;for(i=0; !io.eof(); i+=2) {io.seekg (i, ios: :beg) ;if ( !io.good(} ) return 1;io.get (chl) ;if (io.eof () ) continue;io.get (ch2) ;if ( ! io.