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

Удалить в строке - C++

Восстановить пароль Регистрация
 
OverClocker
0 / 0 / 0
Регистрация: 16.03.2010
Сообщений: 17
12.04.2011, 21:56     Удалить в строке #1
Помогите пожалуйста!

Задание:
1. Удалить часть символьной строки, заключенная в скобки (вместе со скобками).

Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
12.04.2011, 22:01     Удалить в строке #2
Цитата Сообщение от OverClocker Посмотреть сообщение
1. Удалить часть символьной строки, заключенная в скобки (вместе со скобками).
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <algorithm>
 
int main(){
  std::string str;
  getline(std::cin, str);
  str.erase(str.find('('), str.find(')') - str.find('(') + 1);
  std::cout << str;
  return 0;
}
OverClocker
0 / 0 / 0
Регистрация: 16.03.2010
Сообщений: 17
12.04.2011, 23:03  [ТС]     Удалить в строке #3
Маленько не так!
сделал вот так
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
void main ()
{
clrscr ();
char str1[20];
char str2[20];
char *str="stroka (dfergtr) overclocker";
int i,j,o,z;
for (i=0;i<strlen(str);i++)
printf("%c",str[i]);
 
 
//////////////////открывающая////////////////////////
for (i=0;i<strlen(str);i++)
if (str[i]=='(')
o=i;
 
//////////////////закрывающая////////////////////////
for (i=0;i<strlen(str);i++)
if (str[i]==')')
z=i+1;
printf("\n");
 
/////////////////до скобки/////////////////////
for (i=0;i<o;i++)
printf("%c",str[i]);
 
/////////////////после скобки//////////////////
for (i=z;i<strlen(str);i++)
printf("%c",str[i]);
getch ();
}

помогите записать слово до скобки в отдельную строку и после скобки в отдельную строку и потом эти две строки объединить.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
12.04.2011, 23:32     Удалить в строке #4
Цитата Сообщение от OverClocker Посмотреть сообщение
Маленько не так!
Что не так ?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.04.2011, 23:48     Удалить в строке #5
Цитата Сообщение от OverClocker Посмотреть сообщение
Маленько не так!
Вам нужно без STL? Тогда так как-то:

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
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{
    char str[256];
 
    cout << ":";
    cin.getline( str, 255 );
    int str_lng = strlen(str);
 
    char result[255];
    int i = 0;
 
    // ------------- открывающая ---------------
    for( ; i < str_lng; i++ )
    {
        if( str[i] == '(' )
        {
            strncpy( result, str, i );
            i++;
            break;
        }
    }
 
 
    // ------------- закрывающая ---------------
    for( ; i < str_lng; i++ )
    {
        if( str[i] == ')' )
        {
            i++;
 
            if( str[i] ) // если не нуль-терминатор
              strcat( result, &str[i] );
 
            break;
        }
    }
 
    cout << result;
 
    return 0;
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
12.04.2011, 23:49     Удалить в строке #6
ещё способ
C
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
int main(){
    char str[]="stroka (dfergtr)over(df(erg)tr)clocker", *a=str, *b=str, isOpen=0;
    for(; *b=*a; ++a){
        if(*a=='(') ++isOpen;
        if(!isOpen) ++b;
        if(*a==')') --isOpen;
    }
    puts(str);
    return 0;
}
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
13.04.2011, 00:12     Удалить в строке #7
igorrr37, красиво!

Есть, правда, один момент: если в строке есть лишняя закрывающая скобка, то она загоняет isOpen в минус, и получается, что теперь её нужно "закрыть" лишней открывающей - вогнать назад в плюс. Попробуйте поставить лишнюю скобку в середине строки:

C
1
char str[]="stroka (dfergtr)over(dfergtr)clo)ck(df(erg)tr)er";
Или в конце - конец обрезается:

C
1
char str[]="stroka (dfergtr)over(dfergtr)clock(df(erg)tr)e)r";
Лучше было бы, если бы она игнорировалась:

C
1
if(*a==')' && isOpen) --isOpen;
А принцип очень красивый, нравится!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 01:07     Удалить в строке
Еще ссылки по теме:

Удалить лишние пробелы в строке C++
Удалить первое слово в строке C++
Удалить все пробелы в строке C++

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
13.04.2011, 01:07     Удалить в строке #8
уменьшим число проверок
C
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
int main(){
    char str[]="st)r)oka (dfergtr)over(df(erg)tr)clocker", *a=str, *b=str, disbalance=0;
    for(; *b=*a; ++a){
        if(*a=='(') ++disbalance;
        else if(!disbalance) ++b;
        else if(*a==')') --disbalance;
    }
    puts(str);
    return 0;
}
Yandex
Объявления
13.04.2011, 01:07     Удалить в строке
Ответ Создать тему
Опции темы

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