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

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

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

Из заданной строки исключить символы равосположенные между скобками [ ] - C++

14.02.2014, 23:45. Просмотров 646. Ответов 7
Метки нет (Все метки)

Дана строка символов. Исключить из этой строки группы символов, расположенные между скобками [ ]. Сами скобки тоже должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок.

Знаю,есть куча подобных тем,и я облазил их все,однако, так и не смог найти то,что мне надо. Хотелось бы разобраться со своим кодом. Пожалуйста,подскажите в чем ошибка,выводит вообще какие левые символы.


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
#include <cstdlib>
#include <iostream>
#include <string>
 
int main(int argc,char *argv[])
{
    system("chcp 1251");
 
char bes[200];
 
int i;
printf ("ââåñòè ñòðîêó ñèìâîëîâ:");
gets(bes);
char *buf =new char [strlen(bes)+1];
int k,s1,s2;
k=strlen(bes);
for (int i=0;i<k;i++) 
 
if (bes[i]=='[') {
 s1=i; break;}
 
 
 for (int i=0;i<k;i++) 
 
if (bes[i]==']') {
  s2=i; break;}
  
  for (i=0;i<s1;i++);
  { buf[i]=bes[i];}
  
   for (i=s2;i<k+1;i++);
  { buf[i]=bes[i];}
  
puts(buf);
system("PAUSE");
    return EXIT_SUCCESS;
 }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2014, 23:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из заданной строки исключить символы равосположенные между скобками [ ] (C++):

Исключить все символы между круглыми скобками, включая сами скобки - C++
исключить все символы между круглыми скобками, включая сами скобки. Рассмотреть случай вложенных скобок.

Исключить из строки слова, расположенные между скобками ( , ) - C++
Люди, очень нужна помощь! Напишите, пожалуйста, на С++ программу, которая из введенной с клавиатуры строки исключает все слова, заключенные...

Исключить из строки символов те, которые распологаются между круглыми скобками - C++
исключить из строки символов те, которые распологаются между круглыми скобками, включая их . подсчитать на сколько укоротилась строка

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

Строки: удалить все символы, которые размещены между скобками - C++
Помогите пожалуйста. Без понятия как это сделать. Удалить из заданной последовательности все символы которые размещены между скобками...

Удалить из заданной строки все группы символов, расположенные между скобками, включая сами скобки - C++
)))

7
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
14.02.2014, 23:57 #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
#include <cstdlib>
#include <iostream>
#include <string>
 
int main(int argc,char *argv[])
{
    system("chcp 1251");
 
char bes[200];
 
int i;
printf ("ввести строку символов:");
gets(bes);
int k,s1,s2;
k=strlen(bes);
for (int i=0;i<k;i++) 
 
if (bes[i]=='[') {
 s1=i; break;}
 
 
 for (int i=0;i<k;i++) 
 
if (bes[i]==']') {
  s2=i; break;}
char *buf =new char [strlen(bes)+1-s2+s1];
  
  for (i=0;i<s1;i++);
  { buf[i]=bes[i];}
  
   for (i=s2;i<k+1;i++);
  { buf[i]=bes[i];}
  
puts(buf);
system("PAUSE");
    return EXIT_SUCCESS;
 }
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
15.02.2014, 00:00 #3
ksardas19, недавно делал, правда использовал string и функцию replace библиотеки string.
Надеюсь в алгоритме разберётесь.
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
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
    std::cout << "Enter string: ";
    getline(std::cin, str);
    int size, temp, index = 0, counter = 0;
    size = str.size() + 1;
    temp = size;
    
    while(temp != 0)
    {
        if((int)str[index] == 91)
        {
            for(int i = index; i < size; i++)
            {
                counter = i - index;
                if((int)str[i] == 93)
                {
                    str.replace(index, counter + 1, "");
                    size -= counter - 1;
                    break;
                }
            }
        }
        index++;
        temp--;
    }
    
    std::cout << "\n" << str << "\n\n";
    
    system("pause");
    return 0;
}
1
ksardas19
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 15
15.02.2014, 00:34  [ТС] #4
Amandosov, К сожалению,не помогло. По-прежнему выводит левые символы,которых при вводе и в помине нет.

Добавлено через 3 минуты
GuGo1991, Спасибо,но хотелось бы разобраться что не так с моим кодом
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
15.02.2014, 02:30 #5
ksardas19
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
#include <cstdlib>
#include <iostream>
#include <string>
 
int main(int argc,char *argv[])
{
    system("chcp 1251");
 
    char bes[200];
 
    printf("ГўГўГҐГ±ГІГЁ ñòðîêó ñèìâîëîâ: ");
    gets(bes);
    char *buf = new char[strlen(bes) + 1];
    int k, s1, s2;
    k = strlen(bes);
    
    for(int i = 0; i < k; i++)
    {
        if (bes[i] == '[')
        {
            s1 = i;
            break;
        }
    }  
     
    for (int i = 0; i < k; i++) 
    {
        if(bes[i] == ']')
        {
            s2 = i;
            break;
        }
    }
    
    for(int i = 0; i < s1; i++)
        buf[i] = bes[i];
      
    for(int i = s2; i < k; i++)
        buf[i] = bes[i];
      
    puts(buf);
    system("PAUSE");
    return EXIT_SUCCESS;
}
Ваш код, слегка вид изменил. Работает, вам осталось всё в цикл вставить чтобы проверить
если вдруг ещё встретится скобка, а то раз встретится '[' выведит то что было до неё.
1
ksardas19
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 15
15.02.2014, 16:25  [ТС] #6
GuGo1991, Спасибо,но я что-то уже целый день сообразить не могу,ведь по логике он уже должен вывести обрезанную строку,почему он игнорирует второе условие? Можно поподробнее про новый цикл?
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
15.02.2014, 17:36 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ksardas19
Кликните здесь для просмотра всего текста
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
#include <cstdlib>
#include <iostream>
#include <string>
 
int main(int argc,char *argv[])
{
    system("chcp 1251");
 
    char bes[200];
 
    printf("ГўГўГҐГ±ГІГЁ ñòðîêó ñèìâîëîâ: ");
    gets(bes);
    char *buf = new char[strlen(bes) + 1];
    int k, s1, s2, count = 0;
    k = strlen(bes);
    
    for(int i = 0; i < k; i++)
    {
        if (bes[i] == '[')
        {
            s1 = i;
            break;
        }
    }  
     
    for (int i = 0; i < k; i++) 
    {
        if(bes[i] == ']')
        {
            s2 = i;
            break;
        }
    }
    
    for(int i = 0; i < s1; i++)
    {
        buf[i] = bes[i];
        count++;
    }
    
    for(int i = count; i < k; i++)
    {
        s2++;
        buf[i] = bes[s2];
    }
      
    puts(buf);
    system("PAUSE");
    return EXIT_SUCCESS;
}

Вы в последнем цикле значение элемента массива по индексу старого присваивали по тому же индексу новому.
А ещё цикл понадобится чтобы проверить и остальные элементы массива на наличие скобки, если есть такая необходимость.
1
ksardas19
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 15
15.02.2014, 17:52  [ТС] #8
GuGo1991, большое спасибо за внимание и время!
0
15.02.2014, 17:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2014, 17:52
Привет! Вот еще темы с ответами:

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

Работа со строками. Удалить символы между скобками () - C++
Работа со строками. Удалить символы между скобками (), включая сами скобки. Язык С++.

Вывести строку, содержащую символы заданной строки, между которыми вставлено по одному пробелу - C++
Что то вот на решал, немного вроде не так посмотрите оцените пожалуйста; /* Дана непустая строка S . Вывести строку, содержащую символы...

Распечатать введенную строку, исключив из нее те символы, которые находятся между скобками ( ) - C++
Распечатать введенную строку, исключив из нее те символы, которые находятся между скобками ( ). Сами скобки не удалять. Если хотя бы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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