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

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

Войти
Регистрация
Восстановить пароль
 
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
#1

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

07.11.2011, 20:24. Просмотров 442. Ответов 5
Метки нет (Все метки)

Здравствуйте!) У меня есть список, в котором находится строка, например, "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;
 
    }
Вот я написал, а как сделать, чтобы искал парную правую левой скобке?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2011, 20:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите с задачей про списки. (C++):

помогите с задачей про шахматы! не сложная...но сделать не могу.. - C++
помогите с задачей про шахматы! не сложная...но сделать не могу.. нужна программа на классах Клас доска (board) - Print(); -...

Помогите с задачей - C++
Не судите строго, я пока новичок и еще не полностью изучил язык Где мои ошибки? //Программа для решения задач квадратных уравнении ...

Помогите справиться с задачей!! - C++
Начал изучать С++ и попалась задача, не подскажите как ее сделать? Задача 2.29 Для действительных чисел х и а составить функцию...

Помогите с задачей плз! - C++
Добрый день! Вот: вводится число n затем n чисел.Например: 8 1 1 2 3 3 3 10 10 нужно вывести: 2 1 1 2 3 3 2 10, где первые...

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

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

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

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

Добавлено через 11 минут
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Заменить на пробелы нужно тогда...я думаю первую левую и правую...как программа находит первую левую скобку, она должна сразу же искать ей парную правую.
Оставляем левую вторую.
0
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();
}
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
08.11.2011, 12:57 #5
Немного непонятно, к чему тут списки. Как по мне, тут каноничное задание на машину Тьюринга
0
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2011, 20:45
Привет! Вот еще темы с ответами:

Помогите пожалуйста с задачей по BORLAND С++ - C++
Создать шаблон функции, выполгяющий сортировку слиянием (Метод Фон Неймана) в массиве. Протестировать шаблон для массивов с элементами...

Помогите с задачей, пожалуйста! (файлы Си++) - C++
Ну вот. Практикум по Си++. :read: Надо выполнить следующую задачу: Задание: Написать программу, которая читает текстовый файл и...

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

помогите пжлста с задачей! (матрицы и векторы) - C++
Несколько дней ломаю моск никак не получается. Пож оч нужно для допуска к экз!!!! Расстояние между k-й и l-й строками ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.11.2011, 20:45
Ответ Создать тему
Опции темы

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