Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636

Удалить из строки определенные символы БЕЗ циклов

12.07.2020, 02:31. Показов 868. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана строка. Удалите из нее все символы,
чьи индексы делятся на 3.
C++
1
2
3
4
5
6
7
8
void task4(string str)
{
    str.erase(remove(str.begin(), str.end(), [](char symbol) { 
        int index = str.find(symbol); // тут ругается 
        return index % 3 == 0; 
        }));
    cout << str << endl;
}
Помогите, пожалуйста, не пойму как заставить это работать

Добавлено через 17 минут
Цитата Сообщение от Vlast001 Посмотреть сообщение
int index = str.find(symbol); // тут ругается
        return index % 3 == 0;
C++
1
int index = str.find(symbol);
исправил написав [&](char symbol)
Теперь тут ругается return index % 3 == 0; говорить, что нет такого оператора для типа const_Ty
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2020, 02:31
Ответы с готовыми решениями:

Удалить определенные символы строки
дано строку и порядковые номера слов в данной строке. Удалить из строки символы, интервал позиций которых задано длинами данных слов.

Удалить определенные символы из строки
Собственно в теме и вопрос, убрать это &amp;nbsp Примеры строк такие Макдоналдс» подал в суд&amp;nbsp на Роспотребнадзор РТ или ...

Удалить из строки определенные символы
Привет всем. В текстовом файле есть такие строки: 1s21a161hh2#yfatelz.net;sborka Нужно удалить символы от # (включая ее) до ; (не...

6
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
12.07.2020, 04:42
Цитата Сообщение от Vlast001 Посмотреть сообщение
remove(str.begin(), str.end(), [](char symbol)
Что это вообще такое? Что такое remove? Если это std::remove, то кто вам разрешил передавать в него лямбду?

И какой смысл пытаться вычислять индекс символа в процессе удаления, если в в процессе удаления этот индекс запросто может меняться на лету?
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
12.07.2020, 09:00  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
std::remove
Естественно, а что еще это может быть?)
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что это вообще такое? Что такое remove? Если это std::remove, то кто вам разрешил передавать в него лямбду?
И какой смысл пытаться вычислять индекс символа в процессе удаления, если в в процессе удаления этот индекс запросто может меняться на лету?
Вам полегчает, если я скажу
C++
1
str.erase(remove_if(str.begin(), str.end(), [](int index) {return index % 3 == 0; }), str.end());
Что так компилируется, но все еще задача не решена, так нифига оно не удалило из того, что нужно. Только один символ с индексом 2 удаляется
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
12.07.2020, 09:55
Цитата Сообщение от Vlast001 Посмотреть сообщение
Вам полегчает, если я скажу
C++
1
str.erase(remove_if(str.begin(), str.end(), [](int index) {return index % 3 == 0; }), str.end());
Полегчает ли мне или не полегчает - не важно. Важно то, что впредь вы будете тщательно вычитывать то, что постите сюда. Позаботьтесь о том, чтобы мы здесь больше не видели remove там, где имеется в виду remove_if.

Цитата Сообщение от Vlast001 Посмотреть сообщение
Что так компилируется, но все еще задача не решена, так нифига оно не удалило из того, что нужно. Только один символ с индексом 2 удаляется
А почему это по-вашему вообще должно как-то работать? Аргументом предиката в алгоритме remove_if будет сам элемент последовательности, т.е. символ строки, а не его индекс. Почему вы вдруг решили, что в ваш предикат будет передаваться индекс? С чего бы это вдруг? Вы назвали свой параметр словом index и подумали, что компилятор прочитает это слово и "догадается", что вы хотели получить в свой предикат индекс элемента, а не его значение?

Другими словами, ваша лямбда проверяет коды символов на предмет их делимости на 3. Но в задании-то требуется совсем другое.

Ваш первый вариант был хоть и кривой попыткой, но попыткой в правильном направлении, т.е. вы пытались преобразовывать символ в индекс при помощи find. А здесь теперь вообще чушь какая-то написана.
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
12.07.2020, 09:58  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Почему вы вдруг решили, что именно в ваш предикат будет передаваться индекс? С чего бы это вдруг?
Отсюда https://ps-group.github.io/cxx/cxx_remove_if
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
12.07.2020, 10:01
Цитата Сообщение от Vlast001 Посмотреть сообщение
И где же вы там вычитали, что в предикат из std::remove_if передается индекс элемента??? Покажите пальцем.
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
12.07.2020, 10:28  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И где же вы там вычитали, что в предикат из std::remove_if передается индекс элемента??? Покажите пальцем.
Вы можете помочь или нет?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А здесь теперь вообще чушь какая-то написана.
это был следующий вариант реализации, потому что прошлый не сработал, ну и как вы поняли тоже не верный.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
был хоть и кривой попыткой
Раз это раздел для начинающих посчитаю это комплиментом
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
но попыткой в правильном направлении
Ну хотя бы так написали, Спасибо
Вот решение
C++
1
2
3
4
str.erase(remove_if(str.begin(), str.end(), [&](char symbol) {
        size_t pos = str.find(symbol);
        return pos % 3 == 0; 
        }), str.end());
Но вы уже говорили, что этот подход кривой. Как тогда сделать "правильно"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2020, 10:28
Помогаю со студенческими работами здесь

Как удалить определённые символы из строки
Есть массив символов char public static char deaf = new char { 'п','ф','к','ш','с','т','х','ц','ч','щ','П','Ф','К',...

Удалить строки из файла, содержащие определенные символы
Здравствуйте. Помогите пожалуйста реализовать. Есть файл, допустим в нём около 1 млн. строк. Мне нужно удалить строки? содержащие...

Удалить из строки все заранее определенные символы
Есть ли в Net средства для того чтобы из строки удалить все заранее определенные символы?

Удалить слова из строки, которые содержат определённые символы
Вводим строку,между слов произвольное число пробелов, найти в ней слова которые содержат например буквы 'c' и 'л' и удалить их(слова) ...

Действия с текстовым файлом, удалить строки, содержащие определенные символы
У меня есть текстовый файл, в котором содержатся адреса, нужно очистить файл от адресов, в которых есть слова pfr, gov и все, что останется...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru