Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
1

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

20.05.2021, 13:10. Показов 5202. Ответов 65
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить программу обработки массива символов с помощью указателей, которая вводит текст из произвольного количества строк, а затем удаляет из каждой строки последовательность символов, заключённую между двумя очередными появлениями заданного символа, и выводит полученный результат. Обработку строки текста оформить как функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2021, 13:10
Ответы с готовыми решениями:

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

Из заданного текста удалить последовательность символов между двумя апострофами
Из заданного текста удалить последовательность символов, расположенных между двумя апострофами....

Дано предложение. Исключить последовательность символов, заключенную между двумя определенными символами
Дано предложение. Исключить последовательность символов, заключенную между двумя определенными...

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

65
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
21.05.2021, 10:45 2
Лучший ответ Сообщение было отмечено goodrogrammer как решение

Решение

goodrogrammer, предлагаю вам код при работе с одной строкой:
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
//#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
 
char* f(char* str, char symbol)
{
    int len = strlen(str);
    int* ind = new int[len];
    char* ret = new char[len + 1];
    int size = 0, i;
    for (i = 0; i < len; i++)
        if (str[i] == symbol)
        {
            ind[size] = i;
            size++;
        }
    if (size == 0 || size == 1)
    {
        strcpy_s(ret, len + 1, str);
    }
    else
    {
        int j = 0;
        for (i = 0; i < len; i++)
            if (i<ind[0] || i>ind[size - 1])
                ret[j++] = str[i];
            else
            {
                int k;
                for (k = 0; k < size; k++)
                    if (i == ind[k])
                        ret[j++] = symbol;
            }
        ret[j] = '\0';
    }
    delete[] ind;
    return ret;
}
int main() 
{
    char str[50] = "abcdagggabnm";
    char symbol = 'b';
    char* ret = f(str, symbol);
    cout << ret;
    delete[] ret;
    return 0;
}
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
22.05.2021, 00:26  [ТС] 3
Volga_, int len = strlen(str); здесь ошибка
0
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
22.05.2021, 03:24 4
Лучший ответ Сообщение было отмечено goodrogrammer как решение

Решение

goodrogrammer, подключите #include <string>.
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
22.05.2021, 10:37  [ТС] 5
Volga_, Всё равно не работает(
Миниатюры
Удалить из каждой строки последовательность символов заключённую между двумя очередными появлениями заданного символа  
0
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
22.05.2021, 10:45 6
Лучший ответ Сообщение было отмечено goodrogrammer как решение

Решение

Цитата Сообщение от goodrogrammer Посмотреть сообщение
Всё равно не работает(
Цитата Сообщение от Volga_ Посмотреть сообщение
подключите #include <string>.
strlen живёт в <cstring> / <string.h>; <string> для std::string
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
22.05.2021, 10:48  [ТС] 7
Folian, тогда здесь тоже библиотеки не хватает: strcpy_s(ret, len + 1, str);
0
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
22.05.2021, 11:03 8
Цитата Сообщение от goodrogrammer Посмотреть сообщение
тогда здесь тоже библиотеки не хватает
Тут скорее у тебя просто нет самой strcpy_s, это вроде только микрософтовское.
Должны быть strcpy / strncpy;
Попорбуй обычный strcpy(ret, str); чтоль
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
22.05.2021, 11:05  [ТС] 9
Folian, я попробую исправить, но написал программу Volga
0
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
22.05.2021, 11:11 10
Цитата Сообщение от goodrogrammer Посмотреть сообщение
но написал программу Volga
Я вижу
Цитата Сообщение от goodrogrammer Посмотреть сообщение
я попробую исправить
просто замени strcpy_s(ret, len + 1, str);
на strcpy(ret, str);
Не совсем понимаю зачем там len + 1, но вроде работает.
1
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
22.05.2021, 11:12 11
goodrogrammer,
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
//#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
 
char* f(char* str, char symbol)
{
    int len = strlen(str);
    int* ind = new int[len];
    char* ret = new char[len + 1];
    int size = 0, i;
    for (i = 0; i < len; i++)
        if (str[i] == symbol)
        {
            ind[size] = i;
            size++;
        }
    if (size == 0 || size == 1)
    {
        strcpy(ret, str);
    }
    else
    {
        int j = 0;
        for (i = 0; i < len; i++)
            if (i<ind[0] || i>ind[size - 1])
                ret[j++] = str[i];
            else
            {
                int k;
                for (k = 0; k < size; k++)
                    if (i == ind[k])
                        ret[j++] = symbol;
            }
        ret[j] = '\0';
    }
    delete[] ind;
    return ret;
}
int main() 
{
    char str[50] = "abcdagggabnm";
    char symbol = 'b';
    char* ret = f(str, symbol);
    cout << ret;
    delete[] ret;
    return 0;
}
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
22.05.2021, 11:12  [ТС] 12
Folian, Спасибо за помощь, заменил и заработала программа

Добавлено через 40 секунд
Volga_, А почему в программе нету самостоятельного ввода данных? Или так лучше?
0
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
22.05.2021, 11:20 13
Цитата Сообщение от Folian Посмотреть сообщение
Не совсем понимаю зачем там len + 1
Функция strcpy_s() безопаснее strcpy(). Во втором аргументе она требует точно размер содержания, который нужен копировать ! Я хочу копировать все строки str на ret, и конечно - размер должен быть точно len + 1.

Добавлено через 2 минуты
Цитата Сообщение от goodrogrammer Посмотреть сообщение
А почему в программе нету самостоятельного ввода данных? Или так лучше?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main() 
{
    char str[100];
    cout<<"Enter string: ";
    gets(str);
    char symbol;
    cout<<"Enter symbol: ";
    cin>>symbol;
    char* ret = f(str, symbol);
    cout << ret;
    delete[] ret;
    return 0;
}
2
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
22.05.2021, 11:24  [ТС] 14
Volga_, Спасибо
0
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
22.05.2021, 11:28 15
Цитата Сообщение от Volga_ Посмотреть сообщение
Функция strcpy_s() безопаснее strcpy().
Тут не спорю, больше подойдёт strncpy
Цитата Сообщение от Volga_ Посмотреть сообщение
размер должен быть точно len + 1.
Всё правильно; это я уже торможу
2
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
22.05.2021, 11:42 16
Цитата Сообщение от Folian Посмотреть сообщение
больше подойдёт strncpy
Да, можно. Согласен. Я сделал все в студии и часто использовал strcpy_s() хотя она не находится в стандарте. Но сейчас я использую strncpy() как ты советовал.

goodrogrammer, лучше быть:
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
51
52
53
54
55
56
57
#include <iostream>
#include <cstring>
using namespace std;
 
char* f(char* str, char symbol)
{
    int len = strlen(str);
    int* ind = new int[len];
    char* ret = new char[len + 1];
    if (ret == NULL)
        return NULL;
    int size = 0, i;
    for (i = 0; i < len; i++)
        if (str[i] == symbol)
        {
            ind[size] = i;
            size++;
        }
    if (size == 0 || size == 1)
    {
        strncpy(ret, str, len + 1);
    }
    else
    {
        int j = 0;
        for (i = 0; i < len; i++)
            if (i<ind[0] || i>ind[size - 1])
                ret[j++] = str[i];
            else
            {
                int k;
                for (k = 0; k < size; k++)
                    if (i == ind[k])
                        ret[j++] = symbol;
            }
        ret[j] = '\0';
    }
    delete[] ind;
    return ret;
}
 
int main() 
{
    char str[100];
    cout<<"Enter string: ";
    gets(str);
    char symbol;
    cout<<"Enter symbol: ";
    cin>>symbol;
    char* ret = f(str, symbol);
    if (ret)
    {
        cout << ret;
        delete[] ret;
    }
    return 0;
}
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
24.05.2021, 15:43  [ТС] 17
Volga_, Здраствуйте, такой вопрос появился Ваша программа написана прямо чисто по заданию?
0
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
26.05.2021, 10:53  [ТС] 18
Volga_, должно быть больше строк

Добавлено через 2 минуты
Volga_, программа правильная и вывод результат правильно, только строк должно быть больше, помогите пожалуйста
0
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
26.05.2021, 10:53 19
Цитата Сообщение от goodrogrammer Посмотреть сообщение
должно быть больше строк
каких строк?
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
26.05.2021, 11:01  [ТС] 20
Folian, помогите пожалуйста с программой которую написал Volga_, как сделать чтобы было больше строк и можете примерно написать буквы

Добавлено через 3 минуты
Folian, я ввожу одну только строку, а нужно что бы было больше строк
0
26.05.2021, 11:01
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2021, 11:01
Помогаю со студенческими работами здесь

Из строки удалить последовательность символов, расположенных между двумя запятыми
Из строки удалить последовательность символов, расположенных между двумя запятыми (считается, что в...

Удалить последовательность символов, расположенных между двумя запятыми
Задача такова: Удалить последовательность символов, расположенных между двумя запятыми. До этого у...

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

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

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

Дана строка. Удалить часть строки между первым и вторым вхождением заданного символа
Дана строка. Удалить часть строки между первым и вторым вхождением заданного символа


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru