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

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

Восстановить пароль Регистрация
 
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
30.06.2011, 12:45     Проверка правильности расстоновки скобок #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
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2011, 12:45     Проверка правильности расстоновки скобок
Посмотрите здесь:

C++ Проверка правильности ввода
Проверка правильности. C++
Программа проверки правильности скобок C++
C++ Проверка правильности ввода числа
Проверка правильности ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 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 мусор а вы ее используете в цикле
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
30.06.2011, 13:56  [ТС]     Проверка правильности расстоновки скобок #3
спасибо, а не могли бы вы написать как будет выглядеть исправленный текст программы.....
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 1
30.06.2011, 14:06     Проверка правильности расстоновки скобок #4
Перед использованием переменной ее необходимо инициализировать.
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
30.06.2011, 14:08  [ТС]     Проверка правильности расстоновки скобок #5
я не понимаю) напишите код, мне так проще разобратся о чем вы говорите =)
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 1
30.06.2011, 14:10     Проверка правильности расстоновки скобок #6
Цитата Сообщение от dogg12 Посмотреть сообщение
c!='.'
Вообще не похоже что это Ваш код. Вот объясните зачем вы постоянно сравниваете считанный символ с символом точки ?
Еще в условии задачи сказано, что могут присутствовать только круглые скобки, а у вас только {}[] и не одной ().
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
30.06.2011, 14:17  [ТС]     Проверка правильности расстоновки скобок #7
я понял про что вы говорите, спасибо большое.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 16:50     Проверка правильности расстоновки скобок
Еще ссылки по теме:

Проверка правильности расстановки скобок в строке (рекурсия) C++
Проверка правильности ввода C++
Проверка правильности тетраэдра C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
30.06.2011, 16:50     Проверка правильности расстоновки скобок #9
Цитата Сообщение от dogg12 Посмотреть сообщение
Проверить правильность расстановки скобок
Было много раз, воспользуйся поиском
Yandex
Объявления
30.06.2011, 16:50     Проверка правильности расстоновки скобок
Ответ Создать тему
Опции темы

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