Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
25 / 25 / 15
Регистрация: 12.10.2013
Сообщений: 183

Функция удаления текста в скобках

02.03.2015, 11:16. Показов 1760. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание: Написать функцию, которая из строки удаляет подстроки, заключенные в круглые скобки. Написать программу, которая принимает от пользователя набор строк и удаляет из всех строк этого набора подстроки, заключенные в круглые скобки. Использовать написанную функцию.
Есть условие: В первом варианте функция должна принимать в качестве параметра одну (!) С-строку с использованием механизма передачи ее через указатель, во втором - одну(!) строку класса string с использованием механизма передачи ее по ссылке.
Есть проблема: При передаче c-строки выкидывает на внутреннем копировании. Есть подозрение, что пытается скопироваться весь двухмерный массив, но как это поправить - опыт не позволяет, а что гуглить - не позволяет "ДА ЧТО ЗА ЧЕРТОВЩИНА ТУТ ТВОРИТСЯ".

Заранее всем спасибо!
Любым советам по улучшению кода буду рад, только учусь (всё еще).

Функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void remover(char *arr, const int len){ 
    int cpyOfLen = len;
    std::cout << "C-Line is " << arr << " with len: " << len << '\n';
    char *openPos, *closePos;
    char copyOf[255];
    strcpy_s(copyOf, cpyOfLen, arr); //Вот тут выкидывает, ага!
    while (1){
        openPos = strrchr(copyOf, '(');
        closePos = strrchr(copyOf, ')');
        //std::cout << openPos << ' ';
        if ((openPos == NULL) | (closePos == NULL))
            break;
        else if (openPos > closePos){
            memset(copyOf, 0, cpyOfLen);
            cpyOfLen = cpyOfLen - (int)*openPos;
            strcpy_s(copyOf, cpyOfLen, arr);
            //std::cout << "copyOf: " << copyOf << '\n';
        }
    }
    //std::cout << '\n';
}

Тело:

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
int main(int argc, char *argv[]){
    std::string *address;
    unsigned int records = 0, length = 0;
 
    while (records < 1){
        std::cout << "Enter ammount of records: "; std::cin >> records; std::cin.ignore();
    }
 
    char **lineC = new char* [records];
    std::string *line = new std::string[records];
 
    for (unsigned int j = 0; j < records; ++j){
        lineC[j] = new char[255];
    }
 
    //Заполнение массивов, начало!
    for (unsigned int i = 0; i < records; ++i){
        do{
            std::cout << "Input " << i + 1 << " line, shorter than 255 symbols: "; std::getline(std::cin, line[i]); //string line
        } while (line[i].length() > 255);
        strcpy_s(lineC[i], line[i].size() + 1, line[i].c_str());    
    }
    //Заполнение массивов, конец
 
 
    for (unsigned int i = 0; i < records; ++i){
        length = line[i].length();
        address = &line[i];
        remover(*address);
        remover(lineC[i], length);
        //std::cout << "remover(&s) line: " << line[i] << '\n';
    }
    system("pause");
    return 0;
}

Функция, не вызывающая проблем:
C++
1
2
3
4
5
6
7
8
9
10
11
void remover(std::string& s){
    int openPos = s.size(), closePos = 0;
    while(1){
        openPos = s.find_last_of('(', openPos-1);
        closePos = s.find(')', s.find_last_of('(', openPos));
        if ((openPos == -1) | (openPos == 0 && closePos == -1))
            break;
        else if ((openPos != -1) && (closePos != -1))
            s.erase(openPos, closePos - openPos + 1);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2015, 11:16
Ответы с готовыми решениями:

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Функция нахождения и удаления из текста слов- палиндромов
Не могли бы помочь в написании функции,которая будет удалять палиндромы в тексте,который был введен.

Дана строка, в которой имеется текст в скобках. Написать программу удаления части текста, заключенного в скобки, вместе со скобками
Дана строка, в которой имеется текст в скобках. Написать программу удаления части текста, заключенного в скобки, вместе со скобками....

1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.03.2015, 13:21
C++
1
strcpy_s(copyOf, 255, arr);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2015, 13:21
Помогаю со студенческими работами здесь

Функция удаления слов из текста, оставить только цифры в числовом формате
Здравствуйте, есть вопрос по дополнению функции, как сделать так, чтобы цифры получались не такими обычными а такими с пробелами после...

Команда для удаления всего что в скобках
Возможно ли сформировать запрос к БД, чтобы удалить в конкретном столбце любые слова, заключенные в скобки (), а так же сами скобки?

Функция в скобках
Здравствуйте, форумчане, читаю книгу Девида Фленагана &quot;JavaScript: полное руководство&quot;, 6-е издание. Добрался до главы...

Выделение текста в скобках
допустим есть текст тест тест2 (тест3) тест4 (тест5) как сделать чтобы слова в скобках были вынесены в отдельный массив?

Выделение курсивом текста в скобках
имеется большой текст почти в каждом параграфе часть (текста) надо перевести в (курсив), а точнее текст в (скобках) можно ли это...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru