Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
lightmoon
0 / 0 / 0
Регистрация: 27.09.2016
Сообщений: 24
1

Удалить группы символов, расположенные между фигурными скобками

17.12.2016, 15:37. Просмотров 1022. Ответов 3
Метки нет (Все метки)

А можно это же самое, только на си++?
Так же ответить на некоторые вопросы типа:
1. без этих подозрительных звезд * нельзя обойтись? Как изменится код, если сделать без них?
2. упростить нельзя? Чтобы не было всяких strlen, strchr, stdin, BUFSIZ - что это вообще за коварные штуки? >.<

Задание: Удалить группы символов, расположенные между фигурными скобками { и }. Скобки тоже должны быть удалены. Предполагается, что скобки сбалансированы, и внутри каждой пары скобок других фигурных скобок нет.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
int main(void) {
    char s[BUFSIZ], * a, * b;
 
    while ( printf("Vvod: ") && fgets(s, BUFSIZ, stdin) && *s != '\n' ) {
        for ( a = strchr(s, '{'); a; a = strchr(a, '{') ) {
            if ( ! ( b = strchr(a, '}') ) ) {
                fprintf(stderr, "WRONG STRING FORMAT!\n");
                break;
            }
            memmove(a, b + 1, strlen(b));
        }
        printf("Resul`tat: %s", s);
    }
 
    return 0;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2016, 15:37
Ответы с готовыми решениями:

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

Исключить из строки группы символов, расположенные между скобками
Дана строка символов. Исключить из этой строки группы символов, расположенные между скобками ( )....

Удалить из строки последовательности символов, расположенные между скобками
Добрый вечер, ребята! Есть задачка на строки. Дана строка. Удалить из нее последовательности...

Выделить текст между фигурными скобками
Выделить текст главной функции void main() { char s = &quot;#include &lt;iostream&gt;using namespace...

Что находится между заголовком конструктора и фигурными скобками?
Между названием метода и фигурными скобками есть область куда вводятся ??? Что вводится??? void...

3
Peoples
Эксперт С++
1421 / 890 / 773
Регистрация: 06.02.2016
Сообщений: 2,340
Записей в блоге: 19
Завершенные тесты: 5
17.12.2016, 17:09 2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main(){
    string s{};
    getline(cin,s);
    regex e("(\\{)(.*?)(\\})");
    cout<<regex_replace(s,e,"$1$3",regex_constants::format_default);
    return 0;
}
0
Fixer_84
1404 / 884 / 790
Регистрация: 30.04.2016
Сообщений: 3,002
17.12.2016, 22:26 3
lightmoon, здравствуйте! Я предлагаю такой вариант. Вы не только можете удалить то, что в скобках, но и заменить на что-то другое.
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
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
string Exchange(string a, string b, string c) //Функция замены
{
    for (int i = a.length(); i >= 0; i--)
    {
        if (a.substr(i, b.length()) == b)
        {
            a.insert(i, c);
            a.erase(i + c.length(), b.length());
        }
    }
    return a;
}
 
int main()
{
    vector<std::string> x;
    int k, A[100];
    string a, b;
    cout << "Введите строку (ENG):" << endl;
    getline(cin, a);
    k = 0;
    for (int i = 0; a[i]; i++)
    {
        if ((a[i] == '{') || (a[i] == '}'))
        {
            A[k] = i;
            k++;
        }
    }
    for (int i = 0; i < k; i += 2)
    {
        b = a.substr(A[i], A[i+1] - A[i] + 1);
        x.push_back(b);
    }
    for (int i = 0; i < x.size(); i++)
    {
        a = Exchange(a, x[i], "\b"); //Здесь заменяем на что хотим
    }
    cout << "Выводим строку:" << endl;
    cout << a << endl;
    system("pause");
    return 0;
}
0
GbaLog-
Любитель чаепитий
3202 / 1503 / 472
Регистрация: 24.08.2014
Сообщений: 5,271
Записей в блоге: 1
Завершенные тесты: 2
17.12.2016, 22:40 4
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Не по теме:

Цитата Сообщение от lightmoon Посмотреть сообщение
подозрительных звезд *
Всё, теперь указатели буду только так называть. :rofl:



Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <algorithm>
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::string str{};
    std::getline(std::cin, str);
    
    int countBrackets{ std::count(str.begin(), str.end(), '{') };
    while( countBrackets )
    {
        auto beginBracket = str.find('{');
        auto endBracket = str.find('}');
        str = str.substr(0, beginBracket) + str.substr(endBracket + 1);
        --countBrackets;
    }
    
    std::cout << str << "\n";
}
0
17.12.2016, 22:40
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2016, 22:40

Регулярное выражение, выдернуть весь текст между фигурными скобками
Как правильно составить регулярное выражение, чтобы выдергивать весь текст между '{' *это мы...

Исключить из строки слова, расположенные между скобками
Дана последовательность символов S1, …, SN. Группы символов, разделенные пробелом (одним или...

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


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

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

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