Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
07.05.2012, 07:49     Определить правильной ли последовательности расставлены круглые скобки в тексте #1
Здравствуйте! Моя задача звучит следующим образом:
"Дан текстовый файл, содержащий программу на С++. Проверить эту программу на соответстие числа открывающихся и закрывающихся скобок с учетом последовательности. Каждый оператор занимает одну строку"

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

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");
}
Может просто хотя бы идейку подкините, каким образом это вооще можно осуществить? а то моя идея похоже оказалась провальной))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 07:49     Определить правильной ли последовательности расставлены круглые скобки в тексте
Посмотрите здесь:

C++ Проверить, правильно ли расставлены скобки в выражении
Определить, корректно ли расставлены круглые, фигурные и квадратные скобки C++
Дана строка, содержащая латинские буквы и скобки. Если скобки расставлены правильно - вывести 0. Иначе - номер позиции, где есть ошибочная скобка C++
В заданном тексте удалить часть текста заключенную в круглые скобки C++
C++ Определить количество символов фрагмента, заключенного в круглые скобки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
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;
}
kristina-lonsh
0 / 0 / 0
Регистрация: 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); ?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
07.05.2012, 09:47     Определить правильной ли последовательности расставлены круглые скобки в тексте #4
fgets читает строку из файла в buf и возвращает ненулевой указатель если чтение прошло успешно http://www.cplusplus.com/reference/c.../cstdio/fgets/
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
07.05.2012, 09:55  [ТС]     Определить правильной ли последовательности расставлены круглые скобки в тексте #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
fgets читает строку из файла в buf и возвращает ненулевой указатель если чтение прошло успешно http://www.cplusplus.com/reference/c.../cstdio/fgets/
здорово!... А нам такого не давали - вот мы и пытаемся сами изобрести второй раз велосипед.. Спасибо большое!! Всё работает! Я - истинный поклонник умных людей!
Yandex
Объявления
07.05.2012, 09:55     Определить правильной ли последовательности расставлены круглые скобки в тексте
Ответ Создать тему
Опции темы

Текущее время: 09:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru