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

Снова списки. - C++

Восстановить пароль Регистрация
 
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
08.11.2011, 20:37     Снова списки. #1
Здравствуйте!!! Мне нужно сделать функцию, которая проверяет..если есть левая скобка и парная ей правая, то их обе нужно заменить на пробелы. Если нету парных, то список так и вывести. Из чаровского массива строка(символы) переносятся в список. Чаровский массив называется Form...там в цикле все переносится..строка, то есть.
Вот что я написал...но выводит неправильно.
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
// Списки и структуры.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[]={"bcd))"};
    size=strlen(Form);
    for (int i = 0; i<size; i++)
    {
        add(&pend,Form[i]);
        if (Form[i]=='(')
        {               
            scob++;
            ind=i;
            
        }
        if (Form[i]==')')
        {
            scob--;
            ind=i;
        }   
    }
    Node *pv = pbeg;
    Node *pk;       
    //((pv->next)->a)!=')'
    
    bool flag=true;
    while (flag)
    {
        //flag=false;
        while (true)
        {
            
            if(pv->a=='(')
            {
                pk=pv;
                while (pk)
                {
                    pk=pk->next;
                    if (pk->a==')')
                    {
                        pv->a=' ';
                        pk->a=' ';
                        flag=false;
                        break;
                        
                    }
                    //flag=false;
                    //break;
                }               
                flag=false;
                break;
            }
            if (pv->a==')')
            {
                flag=false;
                break;
            }
            pv=pv->next;
            /*if(pv->a==')')
            {
                flag=true;
                break;
 
            }*/
        }
        
    }
 
 
    while (pv)
    {   
        // вывод списка на экран
        cout << pv->a;
        pv = pv->next;
 
    }
    
    cout <<endl;
    
 
    //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;
}
Сам список вот где я проверяю
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
bool flag=true;
    while (flag)
    {
        //flag=false;
        while (true)
        {
            
            if(pv->a=='(')
            {
                pk=pv;
                while (pk)
                {
                    pk=pk->next;
                    if (pk->a==')')
                    {
                        pv->a=' ';
                        pk->a=' ';
                        flag=false;
                        break;
                        
                    }
                    //flag=false;
                    //break;
                }               
                flag=false;
                break;
            }
            if (pv->a==')')
            {
                flag=false;
                break;
            }
            pv=pv->next;
            /*if(pv->a==')')
            {
                flag=true;
                break;
 
            }*/
        }
        
    }
 
 
    while (pv)
    {   
        // вывод списка на экран
        cout << pv->a;
        pv = pv->next;
 
    }
Добавлено через 6 минут
Пожалуйста помогите...мне завтра сдавать! Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 20:37     Снова списки.
Посмотрите здесь:

C++ снова о массивах
и снова строки C++
C++ и снова С++
C++ Снова конструктор
C++ снова pow
C++ И снова argv[]
и снова графика в C++ C++
C++ Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
08.11.2011, 23:04     Снова списки. #2
Вобщем вот без списка просто как конва. Написал на плюсах без использования функций стандартной библиотеки, т.к. понял что ничего сторннего использовать нельзя
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
#include <iostream>
using namespace std;
 
int getleftopen(char * str)
{
    int pos = -1;
    for(int i = 0; str[i] != '\0'; i++)
    {
        if(str[i] == '(')
            pos = i;
    }
    return pos;
}
 
int getrightclose(char * str)
{
    int pos = -1;
    for(int i = 0; str[i] != '\0' && pos == -1; i++)
    {
        if(str[i] == ')')
            pos = i;
    }
    return pos;
}
 
int main()
{
    char str[1024];
    cout<<"Enter string :\n";
    cin.getline(str,1024);
    int nOpen = 0;
    int nClose = 0;
    for(int i = 0; str[i] != '\0'; i++)
    {
        if(str[i] == '(')
            nOpen++;
        if(str[i] == ')')
            nClose++;
    }
    if(nOpen != nClose)
        cout<<"Number of ( not equal )\n";
    else
    {
        int left = getleftopen(str);//Находим самую левую откр скобку
        int right= getrightclose(str);//Находим самую первую закрыв скобку
        cout<<"Steps of moving ()\n";
        while(left != -1 && right != -1)
        {
            //Подтираем скобки
            str[left] = ' ';
            str[right] = ' ';
            cout<<str<<endl;
            //Повторяем поиск открывающих и закрывающих скобок
            left = getleftopen(str);
            right= getrightclose(str);
        }
        cout<<"\nMoving breacets completed\n";
    }
    system("pause");
    return 0;
}
Миниатюры
Снова списки.  
Yandex
Объявления
08.11.2011, 23:04     Снова списки.
Ответ Создать тему
Опции темы

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