Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 04.03.2012
Сообщений: 61
1

Определить правильной ли последовательности расставлены круглые скобки в тексте

07.05.2012, 07:49. Показов 2218. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Моя задача звучит следующим образом:
"Дан текстовый файл, содержащий программу на С++. Проверить эту программу на соответстие числа открывающихся и закрывающихся скобок с учетом последовательности. Каждый оператор занимает одну строку"

Просто соответствие числа откр. и закр. скобок проверить легко, а вот с последовательностью окончательно запуталась (закомментированный фрагмент программы - попытка это реализовать).. Вот код моей программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main ()
{int left=0,right=0, vhod=0, otkrPOZ, zakrPOZ,oshibka=0;
char k;
FILE *fp;
if ((fp=fopen("programma.dat","r"))==NULL) 
    {puts("No open FiLe!!\n"); 
    return 1;}
fseek(fp,0,SEEK_SET);
while ((k=getc(fp))!=EOF) printf("%c",k);
fseek(fp,0,SEEK_SET);
while ((k=getc(fp))!=EOF)
      {if (k=='(') left++;
      if (k==')') right++;
      }
 
 
/*
seek(fp,0,SEEK_SET);
while(!feof(fp))
{while ((k=getc(fp))!='\n')
             {vhod++;
             if (k=='(') {otkrPOZ=vhod; break;}}
while ((k=getc(fp))!='\n')
            {vhod++; 
            if (k==')') {zakrPOZ=vhod; break;}}
if (otkrPOZ>zakrPOZ) {oshibka++;break;}
fseek(fp,1,SEEK_CUR);
}
*/
 
 
cout<<endl<<endl<<"___________________________________________________"<<endl;
if (oshibka>0) cout<<"В тексте имеется ошибка последовательности скобок "<<oshibka<<endl;
if (left==right) cout<<"All GOOD!"<<endl;
if (left>right) cout<<"Otkryvayushihsya skobok bolshe"<<endl;
if (left<right) cout<<"Zakryvayushihsya skobok bolshe"<<endl;
system("PAUSE");
}
Может просто хотя бы идейку подкините, каким образом это вооще можно осуществить? а то моя идея похоже оказалась провальной))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2012, 07:49
Ответы с готовыми решениями:

Определить, корректно ли расставлены круглые, фигурные и квадратные скобки
Вот такая вот нехитрая вроде бы задача: Для введённой пользователем с клавиатуры строки...

Проверить, правильно ли в тексте расставлены круглые скобки
Проверить, правильно ли в тексте расставлены круглые скобки (т.е. находится ли правее...

Проверить, правильно ли в тексте расставлены круглые скобки
Дан файл, содержащий произвольный текст. Проверить, правильно ли в нем расставлены круглые скобки...

Проверить, правильно ли в заданном тексте расставлены круглые скобки
Проверить, правильно ли в заданном тексте расставлены круглые скобки.(stack)стек. консоль апликейшен

4
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
07.05.2012, 09:14 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <cstdio>
 
int IsBalanced(char* p)
{
    int db;
    for(db = 0; *p && db >= 0; ++p)
    {
        if(*p == '(') ++db;
        else if(*p == ')') --db;
    }
    return db;
}
 
int main()
{
    FILE* pf = fopen("1.txt", "r");
    if(pf)
    {
        char buf[BUFSIZ];
        int line, rv;
        for(line = 0; fgets(buf, BUFSIZ, pf); ++line)
        {
            if(rv = IsBalanced(buf))
            {
                printf("Not balanced in line %d, rv is %d\n", line, rv);
                break;
            }
        }
        fclose(pf);
    }
    else perror("fopen() failed");
    return 0;
}
0
0 / 0 / 1
Регистрация: 04.03.2012
Сообщений: 61
07.05.2012, 09:37  [ТС] 3
Цитата Сообщение от igorrr37 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
char buf[BUFSIZ];
        int line, rv;
        for(line = 0; fgets(buf, BUFSIZ, pf); ++line)
        {
            if(rv = IsBalanced(buf))
            {
                printf("Not balanced in line %d, rv is %d\n", line, rv);
                break;
            }
Можно уточнить? Что означает переменная char buf[BUFSIZ]; и функция fgets(buf, BUFSIZ, pf); ?
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
07.05.2012, 09:47 4
fgets читает строку из файла в buf и возвращает ненулевой указатель если чтение прошло успешно http://www.cplusplus.com/refer... dio/fgets/
1
0 / 0 / 1
Регистрация: 04.03.2012
Сообщений: 61
07.05.2012, 09:55  [ТС] 5
Цитата Сообщение от igorrr37 Посмотреть сообщение
fgets читает строку из файла в buf и возвращает ненулевой указатель если чтение прошло успешно http://www.cplusplus.com/refer... dio/fgets/
здорово!... А нам такого не давали - вот мы и пытаемся сами изобрести второй раз велосипед.. Спасибо большое!! Всё работает! Я - истинный поклонник умных людей!
0
07.05.2012, 09:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2012, 09:55
Помогаю со студенческими работами здесь

Проверить, правильно ли в заданном тексте расставлены круглые скобки
Проверить, правильно ли в заданном тексте расставлены круглые скобки.

Проверить, правильно ли в тексте данного файла расставлены круглые скобки
дан файл, содержащий произвольный текст. проверить, правильно ли в нём расставлены круглые...

Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно, то вывести число
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно, то...

Проверить,правильно ли расставлены круглые скобки
Проверить, правильно ли в данной строке расставлены круглые скобки (т.е. находится ли справа от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru