Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Программа, которая считывает имя файла, открывает его и подсчитывает количество скобок каждого вида, содержащихся в файле.
Программа иллюстрирует чтение данных из файла посимвольно. #include<iostream> #include<windows.h> #include<iomanip> #include<math.h> #include<conio.h> #include<String.h> #include<ctype.h> #include <stdlib.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 ifl; // Объявляем файл для чтения char ch; char name[20]; // Имя файла do /* Цикл, который повторяет ввод имени файла до тех пор, пока оно не будет задано правильно */ { int i = 0; // Счетчик символов cout<<"Задайте имя файла: "; while ((ch = _getche())!= '\r') /* Посимвольное чтение имени позволит прервать цикл в любой момент при нажатии клавиши <Esc> (конечно, это не обязательно) */ { if (ch == 27) exit(0); else name[i++] = ch; } cout<<"\n"; name[i] = '\0'; ifl.open(name,ios::in); // пытаемся открыть файл if(ifl==0) // Если файл не открыт, выводим окно с сообщением об ошибке { cout<<"Файл не найден!\n"; ch = _getch(); if (ch==27) exit(0); /* Можно прервать программу, увидев сообщение */ } } while (!ifl); // пока файл не открыт if (ifl) // Если файл открыт, выполняем основные действия: { int val; // Символ, считываемый из файла int count1=0; // Счетчики скобок int count2=0; int count3=0; int count4=0; int count5=0; int count6=0; while (!ifl.eof()) // пока не конец файла { val=ifl.get(); // считываем 1 символ /* проверяем символ и, если это скобка, увеличиваем соответствующий счетчик: */ switch (val) { case '[': count1++; break; case ']': count2++; break; case '(': count3++; break; case ')': count4++; break; case '{': count5++; break; case '}': count6++; } } cout << "[=" << count1 << endl; cout << "]=" << count2 << endl; cout << "(=" << count3 << endl; cout << ")=" << count4 << endl; cout << "{=" << count5 << endl; cout << "}=" << count6 << endl; _getch(); } return 0; } 2. Программа, инвертирующая файл (переставляющая символы в обратном порядке) Используя позиционирование в файле, можно прочитать файл от конца к началу посимвольно. Используя тот же подход можно инвертировать файл и построчно, но это потребует чуть больше программного кода.
#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; 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; // Объявляем файл для чтения ofstream outf; // файл для записи char ch; // символ, который будет считываться из файла char name1[81]; // имя файла для чтения char name2[81]; // имя файла для записи cout<<"Введите имя файла, который нужно инвертировать: "; cin >> name1; inf.open(name1); // открываем файл if (!inf) // если файл не открыт cout<<"Файл не найден"; else { cout << "Введите имя фaйла, который должен получиться в результате: "; cin >> name2; outf.open(name2); // открываем файл для записи inf.seekg(-1L, ios::end); /* выполняем позиционирование на последний символ файла. Первый параметр – длинное целое число, поэтому наличие суффикса L обязательно. Если мы не хотим, чтобы результирующий файл начинался с перехода на другую строку, можно использовать –3L в качестве первого параметра */ do /* повторяем нижеследующие действия до тех пор, пока не дойдем до первого символа файла */ { inf.get(ch); // считываем символ if (ch == '\n') inf.seekg(-1L, ios:: cur); /* каждая строка текстового файла заканчивается двумя символами: “\r\n”, но рассматриваются они как один: ‘\n’, поэтому прочитав ‘\n’, соседний символ пропускаем */ outf << ch; // записываем его в файл cout << ch; // выводим символ на экран inf.seekg(-2L, ios::cur); /* делаем два шага назад (мы движемся в одном направление, а чтение выполняется в другом, поэтому смещать позицию нужно на прочитанный символ и на тот, который будет считываться */ } while (!inf.fail()); /* когда мы попытаемся установить позицию за началом файла, функция fail() будет давать 1 */ cout << endl; // заканчиваем вывод на экран outf << endl; // и в файл inf.close(); outf.close(); // закрываем оба файла } _getch(); return 0; } Date: 2016-08-30; view: 335; Нарушение авторских прав |