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

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

Войти
Регистрация
Восстановить пароль
 
andreyfreelans
63 / 29 / 6
Регистрация: 21.02.2011
Сообщений: 1,142
#1

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

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

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

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

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

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

Проверка правильности ввода - C++
1)Вывести ошибку в консоль, если в символ пользователь пытается вбить строку. 2)Вывести ошибку в консоль, если строка не является...

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

8
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,422
Завершенные тесты: 1
30.06.2011, 13:47 #2

Не по теме:

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


Цитата Сообщение от dogg12 Посмотреть сообщение
C
1
2
3
4
5
//..
char t,c;
stack *top=NULL;
while(c!='.') {
//..
в переменная c мусор а вы ее используете в цикле
1
andreyfreelans
63 / 29 / 6
Регистрация: 21.02.2011
Сообщений: 1,142
30.06.2011, 13:56  [ТС] #3
спасибо, а не могли бы вы написать как будет выглядеть исправленный текст программы.....
0
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,422
Завершенные тесты: 1
30.06.2011, 14:06 #4
Перед использованием переменной ее необходимо инициализировать.
0
andreyfreelans
63 / 29 / 6
Регистрация: 21.02.2011
Сообщений: 1,142
30.06.2011, 14:08  [ТС] #5
я не понимаю) напишите код, мне так проще разобратся о чем вы говорите =)
0
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,422
Завершенные тесты: 1
30.06.2011, 14:10 #6
Цитата Сообщение от dogg12 Посмотреть сообщение
c!='.'
Вообще не похоже что это Ваш код. Вот объясните зачем вы постоянно сравниваете считанный символ с символом точки ?
Еще в условии задачи сказано, что могут присутствовать только круглые скобки, а у вас только {}[] и не одной ().
1
andreyfreelans
63 / 29 / 6
Регистрация: 21.02.2011
Сообщений: 1,142
30.06.2011, 14:17  [ТС] #7
я понял про что вы говорите, спасибо большое.
0
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,422
Завершенные тесты: 1
30.06.2011, 14:29 #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
// ..
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
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.06.2011, 16:50 #9
Цитата Сообщение от dogg12 Посмотреть сообщение
Проверить правильность расстановки скобок
Было много раз, воспользуйся поиском
1
30.06.2011, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 16:50
Привет! Вот еще темы с ответами:

Проверка правильности тетраэдра - C++
Код программы: #include &lt;fstream&gt; //Работа с файлами #include &lt;iostream&gt; //cout - вывод на экран #include &lt;conio.h&gt; //_getch() ...

Проверка правильности ввода - C++
Доброго времени суток. Как, в приведенном ниже коде, сделать так, что бы при вводе отрицательного числа выводилось не &quot;сколько минут вы...

Проверка правильности ввода - C++
Совсем запуталась.Надо ввести целое число. Как сделать так, чтобы при неправильном вводе(символ, буква), выдавалась ошибка?

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


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

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

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