Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


М Петров Сидор Юрьевич 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;

}

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

7. Программа создающая новый текстовый файл из двух данных, в котором 1-я строка –строка из первого файла, 2-я строка – строка из 2-го файла, 3-я строка – содержит общие символы первых 2-х строк.

Программа иллюстрирует использование типа string для работы со строками.

 

#include <iostream>

#include <iomanip>

#include <conio.h>

#include <string>

#include <ctype.h>

#include <stdlib.h>

#include <windows.h>

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

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

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

}

if(SetConsoleOutputCP(1251)==0)

{

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

}

ifstream fi1,fi2; //файлы для чтения

ofstream fo; //файл для записи

string sName1,sName2,sNameRez; //строки для имён файлов

 

do //проверка правильности ввода

{

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

getline(cin,sName1);

basic_string<char>::size_type index;

//переменная для хранения индекса элемента строки

// следующий цикл удаляет пробелы из имени файла:

while((index=sName1.find(" "))!= string::npos)

sName1=sName1.replace(index,1, basic_string<char>(""));

} while(sName1.length()==0);

// Повторяем цикл, если длина имени файла стала равна нулю

 

do

{

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

getline(cin,sName2);

basic_string<char>::size_type index;

//переменная для хранения индекса элемента строки.

while((index=sName2.find(" "))!= string::npos)

sName2=sName2.replace(index,1, basic_string<char>(""));

}while(sName2.length()==0 || sName2.compare(sName1)==0);

/* Повторяем цикл, если длина имени равна нулю или имя второго файла совпадает с именем первого */

 

do

{

cout <<"Введите имя результирующего файла ";

getline(cin,sNameRez);

basic_string<char>::size_type index;

//переменная для хранения индекса элемента строки.

while((index=sNameRez.find(" "))!= string::npos)

sName2=sNameRez.replace(index,1, basic_string<char>(""));

} while(sNameRez.length()==0 ||(sNameRez.compare(sName1) ==0 || sNameRez.compare(sName2)==0));

 

fi1.open(sName1.c_str()); //открытие файла

if(!fi1)

{

cerr<<"Не могу открыть первый файл.\n";

return 1; //закрытие файла

}

fi2.open(sName2.c_str()); //открытие файла

if(!fi2)

{

cerr<<"Не могу открыть второй файл.\n";

fi1.close(); //закрытие файла

return 2;

}

fo.open(sNameRez.c_str()); //открытие файла

if(!fo)

{

cerr<<"Не могу открыть результирующий файл.\n";

fi1.close();//закрытие файла

fi2.close();//закрытие файла

return 3;

}

string str1,str2,str3="";

do

{

getline(fi1,str1);

getline(fi2,str2);

str3.clear();

int *map1=new int [256],*map2=new int [256];

//создание карт символов в строке

for(int i=0;i<255;++i) //обнуляем карты

map1[i]=map2[i]=0;

/* Следующие три цикла записывают в массивы количество повторений каждого символа соответствующей строки */

for(int i=0;i<str1.length();++i)

map1[static_cast<unsigned char>(str1[i])]++; //приведение к беззнаковому типу

for(int i=0;i<str2.length();++i)

map2[static_cast<unsigned char>(str2[i])]++;

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

if(map1[i]&&map2[i])

// Если символ присутствует и в первой и во второй строке:

str3.push_back((char)(i));

// записываем его в конец результирующей строки

// записываем результат в файл:

fo<<str1<<endl;

fo<<str2<<endl;

fo<<str3<<endl;

cout<<str1<<endl;

cout<<str2<<endl;

cout<<str3<<endl;

delete map1; //удаление карт символов для строки

delete map2;

}while(!fi1.eof()&&!fi2.eof()); //выполняем пока одновременно не конец файлов

fi1.close(); //закрытие файла

fi2.close();

fo.close();

_getch();

return 0;

}

8. Программа создаёт из двух файлов третий, в котором содержатся максимальные по длине слова из соответствующих строк исходных файлов, причём все слова длиннее 5-ти символов заключаются в квадратные скобки.

#include<iostream>

#include<iomanip>

#include<conio.h>

#include<string>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

#include<fstream>

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

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

}

if(SetConsoleOutputCP(1251)==0)

{

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

}

ifstream fi1,fi2;

ofstream fo;

string sName1,sName2,sNameRez; //строки, для имён файлов

do //проверка правильности ввода

{

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

getline(cin,sName1);

basic_string<char>::size_type index;

//переменная для хранения индекса элемента строки.

while((index=sName1.find(" "))!=string::npos)

sName1=sName1.replace(index,1, basic_string<char>(""));

}while(sName1.length()==0);

 

do

{

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

getline(cin,sName2);

basic_string<char>::size_type index;

//переменная для хранения индекса элемента строки.

while((index=sName2.find(" "))!=string::npos)

sName2=sName2.replace(index,1, basic_string<char>(""));

}while(sName2.length()==0 || sName2.compare(sName1)==0);

 

do

{

cout <<"Введите имя результирующего файла ";

getline(cin,sNameRez);

basic_string<char>::size_type index;

//переменная для хранения индекса элемента строки.

while((index=sNameRez.find(" "))!=string::npos)

sName2=sNameRez.replace(index,1, basic_string<char>(""));

}while(sNameRez.length()== 0 || (sNameRez.compare(sName1)==0 || sNameRez.compare(sName2)==0));

 

fi1.open(sName1.c_str()); // открытие первого файла

if(!fi1)

{

cerr<<"Не могу открыть первый файл.\n";

return 1;

}

fi2.open(sName2.c_str()); //открытие второго файла

if(!fi2)

{

cerr<<"Не могу открыть второй файл.\n";

fi1.close(); //закрытие файла

return 2;

}

fo.open(sNameRez.c_str());

//открытие результирующего файла

if(!fo)

{

cerr<<"Не могу открыть результирующий файл.\n";

fi1.close(); //закрытие файла

fi2.close();

return 3;

}

string str1,str2,str3="",sub1,sub2;

// следующий цикл выполняется, пока не закончится хотя бы один из файлов

do

{

getline(fi1,str1);

getline(fi2,str2);

str3.clear();

fo<<str1<<endl;

fo<<str2<<endl;

cout<<str1<<endl;

cout<<str2<<endl;

basic_string<char>::size_type ind1;

//переменная для хранения индекса элемента строки

basic_string<char>::size_type ind2;

// следующий цикл обрабатывает две соответствующие строки, считанные из файлов

do

{

ind1=str1.find(" ");

//находим первый пробел в первой строке

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

while(ind1==0 && ind1!= string::npos)

// пока пробел – первый и он вообще есть в строке

{

str1=str1.replace(0,1,"");

//удаляем пробелов слева

ind1=str1.find(" ");

// и находим следующий пробел

}

// выделяем слово из строки:

if(ind1!=string::npos)

//если не конец строки

{

sub1=str1.substr(0,ind1);

//копируем подстроку

str1=str1.replace(0,ind1,"");

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

}

else //конец строки

{

sub1=str1.substr(0,str1.length());

// берем подстроку

str1=str1.replace(0,str1.length(),"");

//удаляем её

}

 

// аналогично только со второй строкой

ind2=str2.find(" ");

while(ind2==0&&ind2!=string::npos)

{

str2=str2.replace(0,1,"");

ind2=str2.find(" ");

}

if(ind2!=string::npos)

{

sub2=str2.substr(0,ind2);

str2=str2.replace(0,ind2,"");

}

else

{

sub2=str2.substr(0,str2.length());

str2=str2.replace(0,str2.length(),"");

}

if(max(sub1.length(),sub2.length())>5)

//если подстрока больше пяти символов тогда

{

str3.append((sub1.length()<sub2.length())?("["+sub2+"] "):("["+sub1+"] ")); /* к третьей строке присоединяем большую из двух подстрок заключенную в квадратные скобки */

}

else //в противном случае

{

str3.append((sub1.length() < sub2.length())? sub2+" ": sub1+" "); // мы просто копируем и добавляем пробел

}

}while(str1.length()||str2.length());

fo<<str3<<endl;

cout<<str3<<endl;

}while(!fi1.eof()&&!fi2.eof());

fi1.close(); //закрытие файла

fi2.close();

fo.close();

_getch();

return 0;

}

 





Поделиться с друзьями:


Дата добавления: 2016-11-24; Мы поможем в написании ваших работ!; просмотров: 386 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинайте делать все, что вы можете сделать – и даже то, о чем можете хотя бы мечтать. В смелости гений, сила и магия. © Иоганн Вольфганг Гете
==> читать все изречения...

2286 - | 2070 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.