В текстовом файле, содержащем текст программы на языке Си, проверить соответствие открывающихся и закрывающихся фигурных скобок
{ и }. Результат проверки вывести на экран и записать в виде фразы в текстовый файл. Результат работы программы (вывод) поместить в отдельный текстовый файл (например, "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
// Language: rust. Details: rust-lang.org use std::fs::File; use std::io::Read; fn main() { let mut f = File::open("src/main.rs").expect("IO Error"); let mut content = String::new(); f.read_to_string(&mut content).expect("IO Error"); let mut balance = 0; for s in content.chars() { match s { '{' => balance += 1, '}' => balance -= 1, _ => {} } } match balance { 0 => println!("All OK"), _ => println!("All NOT OK") } }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;
}