Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Программа, которая считывает имя файла, открывает его и подсчитывает количество скобок каждого вида, содержащихся в файле.




Программа иллюстрирует чтение данных из файла посимвольно.

#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;

}





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


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


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

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

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

4849 - | 4368 -


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

Ген: 0.012 с.