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

Помогите с задачей про списки. - C++

Восстановить пароль Регистрация
 
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.11.2011, 20:24     Помогите с задачей про списки. #1
Здравствуйте!) У меня есть список, в котором находится строка, например, "ab(cd)". Мне нужно, чтобы в этому списке парные скобки(то есть левая и парная ей правая заменялись на пробелы). А если в строке есть только левая или правая, то заменять ничего не надо, выводить строку так, как она есть. У меня не получается это сделать...либо заменяю на пробел только левую, либо только правую( Помогите пожалуйста! Спасибо!
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// Списки и структуры.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include "H1.h"
using namespace std;
 
/*
struct Node
{
    char a;
    int d;
    Node *next;
    Node *prev;
 
};
 
Node * first(char a);
void add(Node **pend, char a);
Node * find(Node * const pbeg, int i);
bool remove(Node **pbeg, Node **pend, int key);
Node * incert(Node * const pbeg, Node **pend, int key, char a);
*/
 
int _tmain(int argc, _TCHAR* argv[])
{
    Node *pbeg = first('a'); // Формирование первого элемента списка
    Node *pend = pbeg; // Список заканчивается, едва начавшись
    // Добавление в конец списка четырех элементов 2, 3. 4. и 5:
    int size;
    int ind;
    int scob=0;
    char Form[]={"b(cd)"};
    size=strlen(Form);
    for (int i = 0; i<size; i++)
    {
        add(&pend,Form[i]);
        if (Form[i]=='(')
        {       
            /*
            for (int h=i;h<size;h++)
            {
                if (Form[h]==')')
                {
                    
                    Form[h]=' ';
                    Form[i]=' ';
                    break;
                }   
        
            }
            */
            scob++;
            ind=i;
            
        }
        if (Form[i]==')')
        {
            scob--;
            ind=i;
        }   
    }
    Node *pv = pbeg;
    Node *pk;       
    //((pv->next)->a)!=')'
    while (pv)
    {
        if(pv->a=='(')
        {           
            while (pv)
            {           
                if (pv->a==')')
                {
                    pv->a=' ';              
                    break;
                }
                pv = pv->next;
 
            }
        }
        pv = pv->next;
        /*
        if(pv->a==')')
        {
            //pk=pv->next;
            pv->a=' ';
        }*/     
    }
    while (pv)
    {
        // вывод списка на экран
        cout << pv->a;
        pv = pv->next;
 
    }
    
    cout <<endl;
    /*/////Ckobish
    
    int size;
    int ind;
    int scob=0;
    char Form[]={"(fg)((gfh))"};
    size=strlen(Form);
    for (int i = 0; i<size; i++)
    {
        
        if (Form[i]=='(')
        {   
            for (int h=i;h<size;h++)
            {
                if (Form[h]==')')
                {
                    Form[i]=' ';
                    Form[h]=' ';
                    break;
                }   
 
        
            }
            
            scob++;
            ind=i;
        }
        if (Form[i]==')')
        {
            scob--;
            ind=i;
        }   
    }
 
    for (int i=0; i<size;i++)
    {
        cout <<Form[i]<<" ";
 
    }
    */
 
    //incert(pbeg, &pend, 'c', 'p');
    // Удаление элемента 5
    //if(!remove (&pbeg, &pend, Form[3]))cout << "не найден";
    // Вставка элемента 200 гюсле элемента 2:
    
    /*
    if (scob> 0)
           cout << "( bigger"<<ind<<endl;
    else if (scob< 0) 
           cout << ") bigger"<<ind<<endl;
    else if (scob == 0) cout << "Good";
    */
 
    return 0;
}
Добавлено через 30 минут
Пожалуйста помогите, до среды нужно сделать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
while (pv)
    {
        if(pv->a=='(')
        {       
            
            pv->a=' ';  
            
                
        }
        // вывод списка на экран
        cout << pv->a;
        pv = pv->next;
 
    }
Вот я написал, а как сделать, чтобы искал парную правую левой скобке?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2011, 20:24     Помогите с задачей про списки.
Посмотрите здесь:

Помогите с задачей с++ C++
C++ помогите с задачей
Помогите с задачей C++
C++ Помогите с задачей
C++ помогите с задачей на С...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DenCHS200
 Аватар для DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
07.11.2011, 22:33     Помогите с задачей про списки. #2
Вопрос, а может в программе быть ситуация, что несколько парных скобок, или учитывается только одна пара?

Добавлено через 51 минуту
В принципе, я алгоритм уже придумал, вот вопрос только: если такая ситуация asd(dfg(dfg), то какую скобку из этих открывающих мы оставляем?
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
07.11.2011, 23:08  [ТС]     Помогите с задачей про списки. #3
Заменить на пробелы нужно тогда...я думаю первую левую и правую...как программа находит первую левую скобку, она должна сразу же искать ей парную правую.

Добавлено через 11 минут
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Заменить на пробелы нужно тогда...я думаю первую левую и правую...как программа находит первую левую скобку, она должна сразу же искать ей парную правую.
Оставляем левую вторую.
DenCHS200
 Аватар для DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
08.11.2011, 11:26     Помогите с задачей про списки. #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
43
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void main()
{
    
char Form[]={"ab(cd))dd"};
       int j,position1,position2,i,size=strlen(Form);
    bool *skobka;
    skobka=new bool [size];// Если True , то открывающая скобка, если False , То закрывающая
     for(i=0;i<size;i++)// выводим исходный массив
           cout<<Form[i];
         j=size;//если будем искать парную закрывающую скобку, то поиск будем начинать справа
       for(i=0;i<size ;i++){
       
      if(Form[i]=='(')//если нашли скобку, то ищем у неё закрывающую скобку, которая по-логике
          //должна быть правее всех
       {position1=i;//запоминаем, где открывающая скобка
      
      do{j--;
      if(Form[j]==')')//если нашли закрывающую скобку, то заменяем символы на пробелы
      {
          Form[position1]=Form[j]=' ';
      
      
      }
      // и понижаем счётчик для поиска закрывающей скобки
      }while((j>=0)&&(Form[j]!=' '))  ;
       
       
       }
           
       
       
       }// и выводим получившийся массив
       cout<<endl;
       for(i=0;i<size;i++)
           cout<<Form[i];
 
    getch();
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
08.11.2011, 12:57     Помогите с задачей про списки. #5
Немного непонятно, к чему тут списки. Как по мне, тут каноничное задание на машину Тьюринга
DenCHS200
 Аватар для DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
08.11.2011, 20:45     Помогите с задачей про списки. #6
KOPC1886, Я вообще списками не работал почти никогда, напиши мне, чё эт такое, это не структура ли случайно?
C++
1
2
3
4
struct FIRST{
char a;
int b;
}
Yandex
Объявления
08.11.2011, 20:45     Помогите с задачей про списки.
Ответ Создать тему
Опции темы

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