В текстовом файле, содержащем текст программы на языке Си, проверить соответствие открывающихся и закрывающихся фигурных скобок
{
и }
. Результат проверки вывести на экран и записать в виде фразы в текстовый файл. Результат работы программы (вывод) поместить в отдельный текстовый файл (например, "out . txt "
), продублировав на экране.Интересное задание, подумайте как его решить. Оно не сложное, как кажется на первый взгляд. Для написания этой программы вам помогут следующие статьи: файлы в С++, возможно — работа со с символами. Результат работы программы показан ниже:
#include <iostream> using namespace std; #include <fstream> int main() { char file_name[100]; // буфер хранения пути к файлу cout << "Введите имя файла: "; cin >> file_name; ifstream fin(file_name); // открываем файл для чтения if (!fin.is_open()) // если файл не открыт cout << "Файл не может быть открыт!\n"; // сообщить об этом else { int counterBracketOpen = 0, // количество вхождений фигурных открывающихся скобок counterBracketClose = 0; // количество вхождений фигурных закрывающихся скобок char symbol; // временная переменная для хранения символов считанных из файла fin >> symbol; // предварительное считывание из файла символа while (fin) { if (symbol == '{') counterBracketOpen++; // инкремент количества октрывающихся фигурных скобок if (symbol == '}') { counterBracketClose++; // инкремент количества закрывающихся фигурных скобок // если нарушен порядок следования скобок if (counterBracketClose > counterBracketOpen) break; // выход из цикла } fin >> symbol; // считываем символ из файла } // конец while fin.close(); // закрываем исходный файл ofstream fout("./out"); // создаём файл для записи результата проверки // выполнияем проверку баланса скобок if (counterBracketOpen == 0 && counterBracketClose == 0) { cout << "В файле нет фигурных скобок!" << endl; fout << "В файле нет фигурных скобок!" << endl; } else if (counterBracketOpen == counterBracketClose) { cout << "Баланс скобок не нарушен!" << endl; fout << "Баланс скобок не нарушен!" << endl; } else { cout << "Баланс Скобок нарушен!" << endl; fout << "Баланс Скобок нарушен!" << endl; } fout.close(); // закрываем файл результата } return 0; }
Для корректного отображения русского текста в Windows, прочитайте статью Кириллица в консоли. Пример работы программы:
Комментарии
Alexander Trousevich
DanilSava
//{} proverka;
#include<iostream>
#include<fstream>
#include<conio.h>
using namespace std;
char *sim = new char [1]; // массив для считывания символа из файла
int mun1 = 0, mun2 = 0, n = 0, razmer = 0;
void rachot(char *sim, int *mun1, int *mun2); //функция расчета mun1={ и mun2=}
int rezul(int mun1, int num2);
int main()
{
ifstream file(«d:\\12.txt»);
if (file.is_open())
cout <<«file open»;
else cout << «file close»;
file.seekg(0, ios_base::end);// подчет количесвтва позиций в файле
razmer=file.tellg();// подчет количесвтва позиций в файле
do // цикл считывания символов
{
file.seekg(n, ios_base::beg); // перемещение по файлу
file.read (sim, 1);
rachot(sim, &mun1, &mun2);
++n;
} while (n<razmer); // проверка достижения конца файла
if (rezul(mun1, mun2)) // проверка равенства { }
cout << «balans»;
else cout << «no balans» << endl;
_getch();
}
void rachot(char *sim, int *mun1, int *mun2)
{
if (sim[0] == ‘{‘)
++(*mun1);
if (sim[0] == ‘}’)
++(*mun2);
}
int rezul(int mun1, int num2)
{
if (mun1 == mun2)
return 1;
else return 0;
}