Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706

Проверка правильности расстоновки скобок

30.06.2011, 12:45. Показов 2292. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана страка. Проверить правильность расстановки скобок (в страке приутствуют только круглые скобки). Вот мой текст, программа не правильно дает результат. Подскажите плтз где исправить и киньте если не сложно исправленный работающий текст программы
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
typedef struct node {char key; node *next;} stack;
stack *top=NULL;
 
int empty (stack *top)
{ 
    return top==NULL;
}
 
stack *push (stack *top, char x)
{
    stack *p;
    p=(stack*)malloc(sizeof(stack));
    p->key=x;
    p->next=top;
    top=p;
    return top;
}
 
stack *pop (stack *top, char *x)
{
    stack *p=top;
    top=top->next;
    *x=p->key;
    free(p);
    return top;
}
 
stack *delstack (stack *top)
{
    char x;
    while(top!=NULL)
        top=pop(top,&x);
    return NULL;
}
 
int proverka ()
{
    int flag=1;
    char t,c;
    stack *top=NULL;
    while(c!='.')
    {
        scanf("%c",&c);
        if((c=='{')||(c=='['))
            top=push(top,c);
        else
            if(c!='.')
            {if((c=='}')||(c==']'))
            {   if(top==NULL)
                {
                    flag=0;
                    break;
                }   
        top=pop(top,&t);
        printf("%c\t",t);}}
        if(c!='.')
        {
            if((!( ((t=='{')&&(c=='}')) || ((t=='[')&&(c==']')) )))
        {
            flag=0;
            break;
        }   
            else
                flag=1;}
    }               
    
    if(!empty(top))
        flag=0;
    delstack(top);
    return flag;
}
 
int main ()
{
    if(proverka()!=0)
        printf("Correct\n");
    else
        printf("Error\n");
    getch();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2011, 12:45
Ответы с готовыми решениями:

Проверка правильности расстановки скобок
Помогите, пожалуйста, в написании счетчика скобок. Только новичок в программирование. Что-то пытался сделать . Начало программы выглядит...

Проверка правильности расстановки скобок в строке
Проверка строки на правильность написания То есть (5-6)*(5-6) правильно )5-6(*(5-6) неправильно

Проверка правильности расстановки скобок в строке (рекурсия)
Помогите написать рекурсивную функцию, проверяющую правильность расстановки скобок в строке. Правильные скобочные структуры: () ({}) ...

8
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.06.2011, 13:47

Не по теме:

Цитата Сообщение от dogg12 Посмотреть сообщение
страка
строка
Цитата Сообщение от dogg12 Посмотреть сообщение
страке
строке


Цитата Сообщение от dogg12 Посмотреть сообщение
C
1
2
3
4
5
//..
char t,c;
stack *top=NULL;
while(c!='.') {
//..
в переменная c мусор а вы ее используете в цикле
1
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
30.06.2011, 13:56  [ТС]
спасибо, а не могли бы вы написать как будет выглядеть исправленный текст программы.....
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.06.2011, 14:06
Перед использованием переменной ее необходимо инициализировать.
0
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
30.06.2011, 14:08  [ТС]
я не понимаю) напишите код, мне так проще разобратся о чем вы говорите =)
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.06.2011, 14:10
Цитата Сообщение от dogg12 Посмотреть сообщение
c!='.'
Вообще не похоже что это Ваш код. Вот объясните зачем вы постоянно сравниваете считанный символ с символом точки ?
Еще в условии задачи сказано, что могут присутствовать только круглые скобки, а у вас только {}[] и не одной ().
1
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
30.06.2011, 14:17  [ТС]
я понял про что вы говорите, спасибо большое.
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.06.2011, 14:29
вот держите, написано на коленке:
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
// ..
int proverka ()
{
    char t, c;
    int flag = 1;
    stack *top = 0;
    do
    {
        scanf("%c", &c);
        if (c == '(')
        {
            top = push(top,c);
        }
        else if (c == ')')
        {
            if (!top)
            {
                flag = 0;
                break;
            }
            top = pop(top, &t);
            if (t != '(')
            {
                flag = 0;
                break;
            }
        }
    } while(c != '.');
    
    if(!empty(top)) flag = 0;
    delstack(top);
    return flag;
}
// ..

Не по теме:

и прекратите меня спамить ЛС!!!



Добавлено через 5 минут
а вот без scanf(), используя строку:
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
43
44
//..
int proverka (const char * p)
{
    char t;
    int flag = 1;
    stack *top = 0;
 
    while(*p)
    {
        if (*p == '(')
        {
            top = push(top, *p);
        }
        else if (*p == ')')
        {
            if (!top)
            {
                flag = 0;
                break;
            }
            top = pop(top, &t);
            if (t != '(')
            {
                flag = 0;
                break;
            }
        }
        ++p;
    }
    
    if(!empty(top)) flag = 0;
    delstack(top);
    return flag;
}
 
int main ()
{
        if(proverka("()()")!=0)
                printf("Correct\n");
        else
                printf("Error\n");
        getch();
        return 0;
}
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.06.2011, 16:50
Цитата Сообщение от dogg12 Посмотреть сообщение
Проверить правильность расстановки скобок
Было много раз, воспользуйся поиском
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2011, 16:50
Помогаю со студенческими работами здесь

Программа проверки правильности скобок
Написать программу которая определит правильно ли расставлены скобки (,) в выражении . Например (222-(2*Х+5))-3*у). Никак не могу понять((

Найти баг в простой функции проверки правильности скобок
Привет! Проходил онлайн тест, нужно было в очень ограниченное время без IDE (форма фиксирует активность, копипаста из IDE не прокатит)...

Проверка правильности.
Хочу реализовать проверку вводимого пользователем формата файла ( *.txt к примеру ) как реализовать это ? с помощью регулярок ?

Проверка правильности ввода
Пишу программу С++ в консоле в RAD Studio. Программа представляет собой задачу. Пользователь вводит число, а программа решает. Мне нужно...

Проверка правильности ввода
Необходимо проверить, правильно ли введено значение переменной int gender; cout &lt;&lt; &quot;Введите ваш пол (укажите цифру)&quot;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru