Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
М Петров Сидор Юрьевич 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; }
Date: 2016-08-30; view: 231; Нарушение авторских прав |