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

Удалить из строки S все подстроки, совпадающие с So

30.10.2023, 10:30. Показов 759. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с So. Если совпадающих подстрок нет, то вывести строку S без изменений.
2) Даны строки S, S1 и S2. Заменить в строке S последнее вхождение строки S1 на строку S2.
 Комментарий модератора 
П.5.16.Правил
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2023, 10:30
Ответы с готовыми решениями:

Удалить из строки S все подстроки, совпадающие с S0
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. ...

Удалить из строки S все подстроки, совпадающие с S0
С++ Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без ...

Удалить из строки S1 все подстроки совпадающие с S2
Прошу помочь перевести из Pascal в C++. Даны две строки: S1 и S2. Удалить из строки S1 все подстроки, совпадающие с S2. Если таких...

9
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
30.10.2023, 11:28
Лучший ответ Сообщение было отмечено danekqxc как решение

Решение

1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
int main()
{
    std::string s, s0;
    std::cout << "Enter string: ";
    std::getline(std::cin, s);
    std::cout << "Enter substring: ";
    std::getline(std::cin, s0);
 
    size_t start {s.find(s0)};            
    while (start != std::string::npos) 
    {
        s.replace(start, s0.length(), ""); 
        start = s.find(s0, start + 1);
    }
    std::cout << s << std::endl;
    return 0;
}
Миниатюры
Удалить из строки S все подстроки, совпадающие с So  
2
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
30.10.2023, 11:29
Лучший ответ Сообщение было отмечено danekqxc как решение

Решение

2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main()
{
    std::string text {"asdasfasgashasjaskasl"};
    std::string old_str{"as"};  // какую подстроку заменить
    std::string new_str{"qw"};  // на какую строку заменить
    std::cout << "String:" << std::endl << text << std::endl;
    size_t start {text.find(old_str)};            // находим позицию подстроки
    while (start != std::string::npos) // находим и заменяем все вхождения строки old_str
    {
        text.replace(start, old_str.length(), new_str); // Замена old_str на new_str
        start = text.find(old_str, start + new_str.length());
    }
    std::cout << "Change \"" << old_str << "\" to \"" << new_str << "\"" << std::endl;
    std::cout << "New string:" << std::endl << text << std::endl;
    return 0;
}
Миниатюры
Удалить из строки S все подстроки, совпадающие с So  
2
30.10.2023, 11:31
 Комментарий модератора 
danekqxc, а вообще, по хорошему, Ваше сообщение требовалось бы удалить за нарушение Правил форума: "один вопрос - одна тема"! Это Вам на будущее.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.10.2023, 12:42
D1973, второе задание качественно сложнее первого (имхо). Дело в том, что после замены возможно появление нового вхождения первой подстроки. Поэтому нужно продолжать поиск не после size() новой строки, а на size() старой минус минус 1, назад. Может я налету что-то не точно говорю, но общая мысль такова)
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
30.10.2023, 13:08
Цитата Сообщение от IGPIGP Посмотреть сообщение
а на size() старой минус минус 1, назад
Согласен, но только в случае использования цикла for - в этом случае мы запросто можем получить вылет за границы диапазона, если будем идти от начала к концу.
цикл же while от такой коллизии вполне себе избавляет.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.10.2023, 19:00
Цитата Сообщение от D1973 Посмотреть сообщение
в этом случае мы запросто можем получить вылет за границы диапазона
Можно и в for. Всё зависит от того как его юзать. В пределе он вырождается в while. Но вопрос не в том. Вопрос в том, что для строк, скажем:
S: "asabaasaba"
S1: "asa"
S2: "sa"
после замены получается:
S: "asabasaba"
То есть, "asa" не пропала) Хотя формально, условие выполнено.
И только после повторной замены оно исчезнет:
S: "asabsaba"
и останется только предыдущее вхождение "asa".
Может я слишком дотошен, но просто выразил сомнение в однозначности условия. Ведь если исходить из того, что после одной замены в строке на одну подстроку должно стать меньше, то я прав. Только если S2 не содержит S1, конечно.
1
31.10.2023, 04:35

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Может я слишком дотошен
как по мне, многие школьные задачи весьма неоднозначны по условию; вот как хочешь, так и понимай. Но на просьбу уточнить задание у учителя в каком-либо спорном моменте, как правило, ответа не бывает...

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.10.2023, 14:11
Цитата Сообщение от D1973 Посмотреть сообщение
как по мне, многие школьные задачи весьма неоднозначны по условию; вот как хочешь, так и понимай. Но на просьбу уточнить задание у учителя в каком-либо спорном моменте, как правило, ответа не бывает...

Не по теме:

Это грустная правда)

0
 Аватар для analogov net
2532 / 1130 / 494
Регистрация: 17.11.2018
Сообщений: 2,836
01.11.2023, 00:20
Цитата Сообщение от IGPIGP Посмотреть сообщение
Дело в том, что после замены возможно появление нового вхождения первой подстроки.
Да, это так. Но по условию задания нужно
Цитата Сообщение от danekqxc Посмотреть сообщение
Заменить в строке S последнее вхождение строки S1 на строку S2
. И не важно сколько вхождений было до этого и сколько будет после. А поэтому цикл не нужен, как мне кажется... Тогда можно сделать как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
int main(){
    std::string str, sub1, sub2;
 
    std::cout << "str > : ";  std::getline( std::cin, str  );
    std::cout << "old > : ";  std::getline( std::cin, sub1 );
    std::cout << "new > : ";  std::getline( std::cin, sub2 );
 
    size_t pos = str.rfind( sub1 );
 
    if( pos != std::string::npos )
        str.replace( pos, sub1.length(), sub2 );
 
    std::cout << "result: " << str << std::endl;    
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2023, 00:20
Помогаю со студенческими работами здесь

Удалить из строки S все подстроки, совпадающие с S0 (STL)
Даны строки S и S0. Требуется удалить из строки S все подстроки, совпадающие с S0. Если таких подстрок нет, то строку S изменять не...

Удалить из строки все подстроки, совпадающие с заданной строкой
Даны строки s и s0. Удалить из строки s все подстроки, совпадающие с s0. Если совпадающих подстрок нет, то вывести строку s без изменений. ...

Удалить из строки S все подстроки, совпадающие с S0
Задача: Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без...

Удалить из строки S все подстроки, совпадающие с S0.
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без...

Удалить из строки S1 все подстроки, совпадающие с S2
Даны две строки: S1 и S2. Удалить из строки S1 все подстроки, совпадающие с S2. Если таких подстрок нет, то вывести S1 без изменений.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru