Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
#1

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

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

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 07:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить правильной ли последовательности расставлены круглые скобки в тексте (C++):

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

Дан файл с текстом проверить правильно ли в нем расставлены круглые скобки - C++
Дан файл с текстом проверить, правильно ли в нем расставлены круглые скобки и исправленный вариант закинуть в новый файл Заранее...

Дана строка, содержащая произвольный текст. Проверить, правильно ли в нем расставлены круглые скобки - C++
Дана строка, содержащая произвольный текст. Проверить, правильно ли в нем расставлены круглые скобки (т.е. находится ли правее каждой...

В тексте удалить символы, заключенные в круглые скобки, вместе со скобками - C++
//--------------------------------------------------------------------------- #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include...

В заданном тексте удалить часть текста заключенную в круглые скобки - C++
В заданном тексте удалить часть текста заключенную в круглые скобки ( скобки не удалять).

Определить количество символов фрагмента, заключенного в круглые скобки. - C++
Помогите пожалуйста.В строке имеется единственный фрагмент, заключенный в круглые скобки. Определить количество составляющих его символов.

4
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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;
}
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); ?
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
07.05.2012, 09:47 #4
fgets читает строку из файла в buf и возвращает ненулевой указатель если чтение прошло успешно http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
1
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
07.05.2012, 09:55  [ТС] #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
fgets читает строку из файла в buf и возвращает ненулевой указатель если чтение прошло успешно http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
здорово!... А нам такого не давали - вот мы и пытаемся сами изобрести второй раз велосипед.. Спасибо большое!! Всё работает! Я - истинный поклонник умных людей!
0
07.05.2012, 09:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 09:55
Привет! Вот еще темы с ответами:

Дана строка, содержащая латинские буквы и скобки. Если скобки расставлены правильно - вывести 0. Иначе - номер позиции, где есть ошибочная скобка - C++
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то есть каждой открывающей соответству-ет одна...

Проверить, правильно ли расставлены скобки в выражении - C++
Задача: &quot;Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе и вложенные. Проверить, правильно ли...

Проверить правильно ли расставлены скобки в арифметическом выражении - C++
Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе вложенные. Проверить, правильно ли в нем...

Проверить, правильно ли в арифметическом выражении расставлены скобки. - C++
Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе вложенные. Проверить, правильно ли в нем...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.