Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
24
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать

5. Программа, которая считывает текст файла и создает новый файл, заменив во всем тексте заданное слово на новое (не изменяя деление на строки и коли­чес­т­во пробелов между словами)

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

#include<fstream> // Этот файл обеспечивает работу с файлами

using namespace std;

// Функция, которая будет выполнять команду “Заменить”

void Replace (char*& str, char* olds,char *news)

/* параметрами функции являются ссылка на указатель, который хранит адрес строки, слово, которое нужно заменить, и новое слово.

Функция будет изменять указатель (адрес строки) */

{

char* rez = new char[2*strlen(str)];

/* новая строка; длина строки может увеличиться в результате замены, поэтому выделим память в 2 раза больше, чем длина исходной строки */

unsigned char slovo[31]; // 1 слово из строки

unsigned char *s = reinterpret_cast<unsigned char*>(str), *r = reinterpret_cast<unsigned char*>(rez), *sl; /* указатели, с помощью которых мы будем двигаться по строке и обрабатывать символ за символом */

while (*s) // пока не достигнут конец строки

{

sl = slovo;

// устанавливаем указатель sl на область памяти для хранения слова

while ( *s > 0 && *s <= ' ') *r++ = *s++;

// Скопировали в результирующую строку пробелы

while ( *s > ' ' && *s < 1<<8 ) *sl++ = *s++;

// Скопировали слово

*sl = '\0'; // записали признак конца слова

if (strcmp(reinterpret_cast<char*>(slovo), olds))

// Если очередное слово не нужно заменять

sl = slovo;

// устанавливаем указатель sl на считанное слово

else

sl = reinterpret_cast<unsigned char*>(news);

// иначе на новое слово

while (*sl) *r++ = *sl++;

// копируем то или иное слово в результирующую строку

}

*r = '\0'; // записываем признак конца строки

delete []str; // удаляем из памяти старую строку

str = rez; // теперь указатель str хранит адрес новой строки

}

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

ifstream inf("test.txt"); // Объявляем файл для чтения

fstream outf("rez.txt",ios::out);

char* str = new char[81] ; // строка для чтения файла

if (!inf)

cout<<"Файл не найден \n";

else

{

while (!inf.eof()) // пока не конец файла

{

inf.getline(str,80); // считываем строку

cout<<str<<endl; // выводим ее на экран

Replace(str, "$$", "???");

// заменяем одно слово на другое

outf << str << endl; // записываем новую строку в файл

}

outf.close(); // созданный файл закрываем

// выводим полученный файл на экран:

outf.open("rez.txt", ios::in);

cout << "\nНовый файл:\n";

while( !outf.eof())

{

outf.getline(str,81);

cout<<str<<endl;

}

}

delete str;

_getch();

return 0;

}

6. Программа, которая считывает данные для структуры Man из файла.

Cтруктура должна содержать следующие поля:

пол, фамилия, имя, отчество, возраст, рост, вес, цвет глаз, цвет волос.

Набор полей, соответствующий одному человеку, должен быть записан в одну строку.

Файл должен содержать информацию о нескольких людях.

Программа должна вывести на экран сведения о всех людях, рост которых > 180 см.

Файл с данными:

м Сидоров Иван Петрович 52 185 90 карий русый

ж Иванова Анна Марковна 45 170 72 голубой блонд

м Петров Сидор Юрьевич 34 182 120 зеленый рыжий

Программа:

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include <stdlib.h>

#include<windows.h>

#include <fstream> // Этот файл обеспечивает работу с файлами

using namespace std;

// Описание структуры:

struct Man

{

char sex; // пол

char FIO[80]; // фамилия, имя, отчество

int age; // возраст

int height; // рост

int weight; //вес

char ycolor[20]; // цвет глаз

char hcolor[20]; //цвет волос

};

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

fstream fl;

char fName[20];

cout <<"Введите имя файла ";

cin.getline(fName,20);

fl.open(fName,ios::in);

if (!fl) cout<<"Файл не найден.\n";

if (fl)

{

char str[100];

cout <<"Файл с данными: \n";

while (!fl.eof())

{

fl.getline(str,100);

cout << str << endl;

}

// Обработка данных:

fl.seekg(0L, ios::beg); // возвращаемся в начало файла

fl.clear();

Man person; /* объявляем конкретный набор данных, который будет хранить сведения об одном человеке */

char fam[40], name[40], otch[40];

for(int i=0;i<80;i++)

cout << "=";

cout << endl;

// фамилия, имя отчество как отдельные слова

char flag = 1; // признак того, что нужные данные еще не найдены

while (!fl.eof())

{

fl>>person.sex;

// начинаем считывать данные на очередного человека

if (!fl.eof()) // если файл еще не закончен

{

fl >> fam >> name >> otch;

// считываем фамилию, имя отчество

// и собираем их в одну строку FIO:

strcat(fam," ");

strcat(fam,name);

strcat(fam," ");

strcat(fam,otch);

strcpy(person.FIO,fam);

// считываем остальные данные:

fl>>person.age>>person.height >> person.weight >> person.ycolor >> person.hcolor;

if (person.height > 180)

// если считанные данные удовлетворяют условию (рост > 180)

{

if (flag) cout<<

"Люди, рост которых > 180 см:\n";

/* если найден первый человек, удовлетворяющий условию, выводим поясняющий текст */

flag = 0; // признак того, что данные найдены

// выводим найденные данные:

cout <<"пол " << person.sex <<" ФИО: " << person.FIO << endl <<"возраст: " << person.age <<" рост: " << person.height <<" вес: " << person.weight <<" цвет глаз: " <<person.ycolor <<" цвет волос: "<< person.hcolor << endl ;

} // end if

} // end if

} // end while

if (flag) cout <<"Нет сведений о людях, рост которых > 180 см.\n";

} // end if

_getch();

return 0;

}

Необходимость использования структуры в данном примере не слишком очевид­на вследствие небольшого объема примера, однако в реальных задачах, работающих со множеством объектов, структуры действительно полезны.