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

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

Войти
Регистрация
Восстановить пароль
 
CHELitw
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 30
#1

Если в строке левая и правая скобки идут рядом, удалить их из строки - C++

19.09.2012, 13:45. Просмотров 543. Ответов 7
Метки нет (Все метки)

Сгенерировать строку, длиной в 256 символов, которая состоит из случайной последовательности скобок разных видов: круглых, квадратных и фигурных. Проанализировать строку, и если в ней левая и права скобки одного вида идут рядом,удалить их из строки. Повторяйте процедуру, пока это возможно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2012, 13:45     Если в строке левая и правая скобки идут рядом, удалить их из строки
Посмотрите здесь:

Правая и левая производная - C++
Помогите сделать задачу. Необходимо посчитать правую и левую производную для какой-либо функции на отрезке h.

Удалить часть символьной строки, заключонной в скобки - C++
2) Удалить часть символьной строки, заключонной в скобки (вместе со скобками).

Удалить часть символьной строки, заключенной в скобки - C++
Удалить часть символьной строки, заключенной в скобки (вместе со скоб¬ками). (использовать iostream.h)

Удалить часть символьной строки, заключенной в скобки - C++
Помогите пожалуйста решить задачу Вот условие:Удалить часть символьной строки, заключенной в скобки (вместе со скобками).

Ошибка в задаче: Найти мин. k, которое будет удовлетворять условию: fabs(правая часть - левая часть) < 10^(-15) - C++
Задача: k изменяется от 0 до бесконечности ((4k+1)! / ^2) * x^2k = =1/2* X принадлежит интервалу (-1/4 ; 1/4) Найти мин....

Удалить часть символьной строки, заключенной в скобки (вместе со скобками). - C++
Удалить часть символьной строки, заключенной в скобки (вместе со скобками).

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
19.09.2012, 15:07     Если в строке левая и правая скобки идут рядом, удалить их из строки #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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
void checkAndDelete( const char*, int );
 
int main() {
        srand( time ( NULL ) );
    string fill = {'[', ']', '(', ')', '}', '{', '<', '>'};
    
    const char* buffer = new const char* [256];
    
    for ( int i = 0; i < 256; i ++ )
        buffer[i] = fill[std::rand() % fill.length()];
    
    std::cout << buffer << std::endl;
    
    checkAndDelete(buffer, 0);
    
    return 0;
}
 
 
void checkAndDelete ( const char* buffer, int index )
{
    if ( index < 256 ) {
        if ( abs(int(buffer[index]) - int(buffer[index+1])) == 1  ) {
            buffer[index] = '';
            buffer[index+1] = '';
                        std::cout << buffer << std::endl;
            }
        checkAndDelete (buffer, index++);  
    }
}
компилятора плюсового нет под рукой. может, кто из местных гуру подправит, если что не так

Добавлено через 1 минуту
можно совсем извратиться, и сдвигать по индексу удаленные эл-ты. тогда итераций будет больше
CHELitw
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 30
19.09.2012, 15:14  [ТС]     Если в строке левая и правая скобки идут рядом, удалить их из строки #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main ()
{
    int it=0;
    char duzki[]="()[]{}";
    for (int it=0;it<256;it++)
    {
        int i=0;
        i=5*rand()/RAND_MAX;
        cout<<duzki[i];
        i++;
    }
system("pause");
return 1;
}
Только выводит рандомные символы.
как их проверить и исключить?
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
19.09.2012, 15:15     Если в строке левая и правая скобки идут рядом, удалить их из строки #4
а вот из моего куска возьми функцию и один раз вызови ее.
CHELitw
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 30
20.09.2012, 18:35  [ТС]     Если в строке левая и правая скобки идут рядом, удалить их из строки #5
Мне нужно в С++ сделать,а с кодом в С я не дружу.
Mr.X
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
20.09.2012, 20:37     Если в строке левая и правая скобки идут рядом, удалить их из строки #6
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
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
const T_str     ROUND_BRACKETS    =   "()";
const T_str     SQUARE_BRACKETS   =   "[]";
const T_str     FRENCH_BRACKETS   =   "{}";
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_brackets_generator
{
    const T_str&    brackets_str_;
    //-----------------------------------------------------------------------------------
    T_brackets_generator(const T_str&  brackets_str)
        :
        brackets_str_( brackets_str )
    {}
    //-----------------------------------------------------------------------------------
    char    operator() ()
    {
        return  brackets_str_
                    [
                        rand() % brackets_str_.size()
                    ];
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
void  remove_adjacend_brackets(T_str&  s)
{    
    T_str::size_type    pos     =   0;
    
    while   (
                    !s.empty()
                &&  (
                                ( pos     =   s.find( ROUND_BRACKETS    ) )     !=  T_str::npos
                        ||      ( pos     =   s.find( SQUARE_BRACKETS   ) )     !=  T_str::npos
                        ||      ( pos     =   s.find( FRENCH_BRACKETS   ) )     !=  T_str::npos
                    )
            )
    {
        s.erase( pos, 2);
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    srand(unsigned(time(0)));
    const int       STRING_SIZE     =   256;
 
    T_str   s   ( 
                    STRING_SIZE,
                    '\0'
                );
 
    std::generate
        (
            s.begin                 (),
            s.end                   (),
            T_brackets_generator    (
                                            ROUND_BRACKETS
                                        +   SQUARE_BRACKETS
                                        +   FRENCH_BRACKETS
                                    )
        );
 
    std::cout   <<  s
                <<  std::endl;
 
    remove_adjacend_brackets(s);
 
    std::cout   <<  std::endl
                <<  s
                <<  std::endl;
}
CHELitw
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 30
02.10.2012, 01:01  [ТС]     Если в строке левая и правая скобки идут рядом, удалить их из строки #7
Не работает ни один из кодов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main ()
{
    int it=0;
    char duzki[]="()[]{}";
    for (int it=0;it<256;it++)
    {
        int i=0;
        i=5*rand()/RAND_MAX;
        cout<<duzki[i];
        i++;
    }
system("pause");
return 1;
}
может ли кто-то до этого кода добавить функцию проверки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 16:18     Если в строке левая и правая скобки идут рядом, удалить их из строки
Еще ссылки по теме:

Удалить части строки, заключенные в правильно расставленные фигурные скобки - C++
Помогите пожалуйста с задачкой. Задание:Задана строка. Нужно удалить ее части, заключенные в правильно расставленные фигурные скобки....

Строки (В строке переставить местами рядом стоящие слова) - C++
Задача: В строке переставить местами рядом стоящие слова. Помогите сделать через 3 строки, именно через 3. Т.е. берется 1 слово и...

Дана строка, содержащая латинские буквы и скобки. Если скобки расставлены правильно - вывести 0. Иначе - номер позиции, где есть ошибочная скобка - C++
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то есть каждой открывающей соответству-ет одна...

Удалить часть символьной строки, заключенной в скобки (вместе со скобками). Нужно через вхождение в строку - C++
с++ это не катит #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include&lt;string.h&gt; using namespace std; int main() { ...


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

Или воспользуйтесь поиском по форуму:
CHELitw
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 30
31.10.2012, 16:18  [ТС]     Если в строке левая и правая скобки идут рядом, удалить их из строки #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
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
155
156
157
// price.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream.h>
 
void odinici(int kop, char * mystr);
void desyatku(int kop, char * mystr);
 
void main()
{
    int price=0;
    while (price<=0 || price>1000)
    {
 
        cout<<"vvedyt cinu w kopiykah: ";
        cin>>price;
    }
    int hryvna=price/100;
    int kopiyku=price%100;
    int I0kop=kopiyku/10;
    int Ikop=kopiyku%10;
    if (kopiyku<20){Ikop=kopiyku%20;}
    cout<<"hryvna: "<<hryvna<<endl;
    cout<<"10 kop: "<<I0kop<<endl;
    cout<<"1 kop: "<<Ikop<<endl;
    char propisom[255];
    desyatku(I0kop,propisom);
    cout<<propisom<<endl;
    odinici(Ikop, propisom);
    cout<<propisom<<endl;
    system("pause");
}
 
 
void odinici(int kop, char * mystr)
{
    switch (kop)
    {
    case 1:sprintf(mystr, "odna"); break;
    case 2:sprintf(mystr, "dvi"); break;
    case 3:sprintf(mystr, "tri"); break;
    case 4:sprintf(mystr, "choturu"); break;
    case 5:sprintf(mystr, "pyat"); break;
    case 6:sprintf(mystr, "shist"); break;
    case 7:sprintf(mystr, "sim"); break;
    case 8:sprintf(mystr, "visim"); break;
    case 9:sprintf(mystr, "devyat"); break;
    case 10:sprintf(mystr, "desyat"); break;
    case 11:sprintf(mystr, "odunadtsat"); break;
    case 12:sprintf(mystr, "dvanadsat"); break;
    case 13:sprintf(mystr, "trunadsat"); break;
    case 14:sprintf(mystr, "choturnadsat"); break;
    case 15:sprintf(mystr, "pyatnadsat"); break;
    case 16:sprintf(mystr, "shistnadsat"); break;
    case 17:sprintf(mystr, "simnadsat"); break;
    case 18:sprintf(mystr, "visimnadsat"); break;
    case 19:sprintf(mystr, "devyatnadsat"); break;
    default:sprintf(mystr, "");break;
 
    }
}
 
void desyatku(int I0kop, char * mystr)
{
    switch (I0kop)
    {
    case 2:sprintf(mystr, "dvadsyat"); break;
    case 3:sprintf(mystr, "tridsyat"); break;
    case 4:sprintf(mystr, "sorok"); break;
    case 5:sprintf(mystr, "pyatdesyat"); break;
    case 6:sprintf(mystr, "shistdesyat"); break;
    case 7:sprintf(mystr, "simedesyat"); break;
    case 8:sprintf(mystr, "visimdestat"); break;
    case 9:sprintf(mystr, "devyanosto"); break;
    default:sprintf(mystr, "");break;
 
    }
}// price.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream.h>
 
void odinici(int kop, char * mystr);
void desyatku(int kop, char * mystr);
 
void main()
{
    int price=0;
    while (price<=0 || price>1000)
    {
 
        cout<<"vvedyt cinu w kopiykah: ";
        cin>>price;
    }
    int hryvna=price/100;
    int kopiyku=price%100;
    int I0kop=kopiyku/10;
    int Ikop=kopiyku%10;
    if (kopiyku<20){Ikop=kopiyku%20;}
    cout<<"hryvna: "<<hryvna<<endl;
    cout<<"10 kop: "<<I0kop<<endl;
    cout<<"1 kop: "<<Ikop<<endl;
    char propisom[255];
    desyatku(I0kop,propisom);
    cout<<propisom<<endl;
    odinici(Ikop, propisom);
    cout<<propisom<<endl;
    system("pause");
}
 
 
void odinici(int kop, char * mystr)
{
    switch (kop)
    {
    case 1:sprintf(mystr, "odna"); break;
    case 2:sprintf(mystr, "dvi"); break;
    case 3:sprintf(mystr, "tri"); break;
    case 4:sprintf(mystr, "choturu"); break;
    case 5:sprintf(mystr, "pyat"); break;
    case 6:sprintf(mystr, "shist"); break;
    case 7:sprintf(mystr, "sim"); break;
    case 8:sprintf(mystr, "visim"); break;
    case 9:sprintf(mystr, "devyat"); break;
    case 10:sprintf(mystr, "desyat"); break;
    case 11:sprintf(mystr, "odunadtsat"); break;
    case 12:sprintf(mystr, "dvanadsat"); break;
    case 13:sprintf(mystr, "trunadsat"); break;
    case 14:sprintf(mystr, "choturnadsat"); break;
    case 15:sprintf(mystr, "pyatnadsat"); break;
    case 16:sprintf(mystr, "shistnadsat"); break;
    case 17:sprintf(mystr, "simnadsat"); break;
    case 18:sprintf(mystr, "visimnadsat"); break;
    case 19:sprintf(mystr, "devyatnadsat"); break;
    default:sprintf(mystr, "");break;
 
    }
}
 
void desyatku(int I0kop, char * mystr)
{
    switch (I0kop)
    {
    case 2:sprintf(mystr, "dvadsyat"); break;
    case 3:sprintf(mystr, "tridsyat"); break;
    case 4:sprintf(mystr, "sorok"); break;
    case 5:sprintf(mystr, "pyatdesyat"); break;
    case 6:sprintf(mystr, "shistdesyat"); break;
    case 7:sprintf(mystr, "simedesyat"); break;
    case 8:sprintf(mystr, "visimdestat"); break;
    case 9:sprintf(mystr, "devyanosto"); break;
    default:sprintf(mystr, "");break;
 
    }
}
Добавлено через 22 минуты
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
// price.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream.h>
 
 
void GRN(int kop, char * mystr);
void KOP(int kop, char * mystr);
void odinici(int kop, char * mystr);
void odinici(int kop, char * mystr);
void desyatku(int kop, char * mystr);
 
void main()
{
    int price=0;
    while (price<=0 || price>1000)
    {
 
        cout<<"vvedyt cinu w kopiykah: ";
        cin>>price;
    }
    int hryvna=price/100;
    int kopiyku=price%100;
    int I0kop=kopiyku/10;
    int Ikop=kopiyku%10;
    if (kopiyku<20){Ikop=kopiyku%20;}
    cout<<"hryvna: "<<hryvna<<endl;
    cout<<"10 kop: "<<I0kop<<endl;
    cout<<"1 kop: "<<Ikop<<endl;
    char propisom[255];
    odinici(hryvna,propisom);
    cout<<propisom<<" ";
    GRN(hryvna,propisom);
    cout<<propisom<<" ";
    desyatku(I0kop,propisom);
    cout<<propisom<<" ";
    odinici(Ikop, propisom);
    cout<<propisom<<" ";
    KOP(Ikop, propisom);
    cout<<propisom<<endl;
    system ("pause");
}
 
 
void odinici(int kop, char * mystr)
{
    switch (kop)
    {
    case 1:sprintf(mystr, "odna"); break;
    case 2:sprintf(mystr, "dvi"); break;
    case 3:sprintf(mystr, "tri"); break;
    case 4:sprintf(mystr, "choturu"); break;
    case 5:sprintf(mystr, "pyat"); break;
    case 6:sprintf(mystr, "shist"); break;
    case 7:sprintf(mystr, "sim"); break;
    case 8:sprintf(mystr, "visim"); break;
    case 9:sprintf(mystr, "devyat"); break;
    case 10:sprintf(mystr, "desyat"); break;
    case 11:sprintf(mystr, "odunadtsat"); break;
    case 12:sprintf(mystr, "dvanadsat"); break;
    case 13:sprintf(mystr, "trunadsat"); break;
    case 14:sprintf(mystr, "choturnadsat"); break;
    case 15:sprintf(mystr, "pyatnadsat"); break;
    case 16:sprintf(mystr, "shistnadsat"); break;
    case 17:sprintf(mystr, "simnadsat"); break;
    case 18:sprintf(mystr, "visimnadsat"); break;
    case 19:sprintf(mystr, "devyatnadsat"); break;
    default:sprintf(mystr, "");break;
 
    }
}
 
void desyatku(int I0kop, char * mystr)
{
    switch (I0kop)
    {
    case 2:sprintf(mystr, "dvadsyat"); break;
    case 3:sprintf(mystr, "tridsyat"); break;
    case 4:sprintf(mystr, "sorok"); break;
    case 5:sprintf(mystr, "pyatdesyat"); break;
    case 6:sprintf(mystr, "shistdesyat"); break;
    case 7:sprintf(mystr, "simedesyat"); break;
    case 8:sprintf(mystr, "visimdestat"); break;
    case 9:sprintf(mystr, "devyanosto"); break;
    default:sprintf(mystr, "");break;
 
    }
}
 
 
void GRN(int kop, char * mystr)
{
    switch (kop)
    {
    case 1:sprintf(mystr, "grivnya"); break;
    case 2:
    case 3:
    case 4:sprintf(mystr, "grivni"); break;
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:sprintf(mystr, "griven"); break;
    default:sprintf(mystr, "");break;
    }
}
 
void KOP(int kop, char * mystr)
{
    switch (kop)
    {
    case 0:sprintf(mystr, "kopiyok"); break;
    case 1:sprintf(mystr, "kopiyka"); break;
    case 2:
    case 3:
    case 4:sprintf(mystr, "kopiyku"); break;
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:sprintf(mystr, "kopiyok"); break;
    default:sprintf(mystr, "");break;
    }
}
Yandex
Объявления
31.10.2012, 16:18     Если в строке левая и правая скобки идут рядом, удалить их из строки
Ответ Создать тему
Опции темы

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