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

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

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

Author24 — интернет-сервис помощи студентам
Есть задание: Написать функцию, которая из строки удаляет подстроки, заключенные в круглые скобки. Написать программу, которая принимает от пользователя набор строк и удаляет из всех строк этого набора подстроки, заключенные в круглые скобки. Использовать написанную функцию.
Есть условие: В первом варианте функция должна принимать в качестве параметра одну (!) С-строку с использованием механизма передачи ее через указатель, во втором - одну(!) строку класса 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2015, 11:16
Ответы с готовыми решениями:

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

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

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

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

1
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
02.03.2015, 13:21 2
C++
1
strcpy_s(copyOf, 255, arr);
0
02.03.2015, 13:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2015, 13:21
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru