Здесь у меня есть строка, подобная этой WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB
Я хочу удалить все wub
word form this и получить этот результат WE ARE THE CHAMPIONS MY FRIEND
.
Есть ли какая-либо особая функция в C++ для этого, что я нашел string::erase
, но это реле не помогает мне !!
Я могу сделать это с помощью цикла for
и найти эту строку слова, а затем удалить ее, но я ищу лучший способ. Есть ли какая-нибудь функция для этого?Как удалить подстроку из строки в C++
ответ
Вы можете использовать std::regex_replace
:
std::string s1 = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
std::regex target("(WUB)+");
std::string replacement = " ";
std::string s2 = std::regex_replace(s1, target, replacement);
Учитывая желаемый выход OP, я думаю, что строка замены должна содержать пробел. –
@FredLarson: хорошая точка - я обновлю ответ. –
А, а обновленное регулярное выражение заменяет последовательные совпадения одним пространством. Хорошая работа. –
Использование подталкивание :: Алгоритм :: replace_all
#include <iostream>
#include <string>
#include <boost/algorithm/string/replace.hpp>
int main()
{
std::string input="WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
boost::algorithm::replace_all(input, "WUB", " ");
std::cout << input << std::endl;
return 0;
}
Не могли бы вы расширить свой ответ, чтобы привести пример того, как это будет применяться? –
добавлен пример –
Спасибо - это полезно. Наверное, это вряд ли справится с примером OP, т. Е. «WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB» -> «МЫ ЧЕМПИОНЫ МОИ ДРУГА»? –
Стирание всех вхождений:
#include <iostream>
std::string removeAll(std::string str, const std::string& from) {
size_t start_pos = 0;
while((start_pos = str.find(from)) != std::string::npos) {
str.erase(start_pos, from.length());
}
return str;
}
int main() {
std::string s = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
s = removeAll(s, "WUB");
return 0;
}
Заменить все вхождения:
std::string replaceAll(std::string str, const std::string& from, const std::string& to) {
size_t start_pos = 0;
while((start_pos = str.find(from, start_pos)) != std::string::npos) {
str.replace(start_pos, from.length(), to);
start_pos += to.length();
}
return str;
}
int main() {
std::string s = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
s = replaceAll(s, "WUB", " ");
/* replace spaces */
s = replaceAll(s, " ", " ");
return 0;
}
Из примера в вопросе похоже, что OP хочет заменить одно или несколько последовательных вхождений «WUB» с одним пробелом. –
@PaulR код добавлен – 4pie0
Выглядит хорошо, кроме «WUBWUB» должно дать только одно пространство, я думаю, не два? –
- 1. Как удалить подстроку из строки
- 2. Удалить подстроку из строки
- 3. Как удалить подстроку из строки?
- 4. Удалить подстроку из строки
- 5. Удалить динамическую подстроку из строки C#
- 6. Как удалить подстроку в C
- 7. Как удалить подстроку из строки в java
- 8. Как удалить определенную подстроку из строки?
- 9. Удалить повторяющуюся подстроку из строки
- 10. iPhone удалить подстроку из строки
- 11. Удалить динамическую подстроку из строки
- 12. Удалить определенную подстроку из строки
- 13. Hive - удалить подстроку из строки
- 14. удалить последнюю подстроку из строки
- 15. Как удалить DateTime подстроку из строки
- 16. Удалить подстроку из строки в D
- 17. AngularJS Удалить подстроку из строки в выражении {{}}
- 18. Как получить подстроку из строки в C#?
- 19. Как извлечь подстроку из строки в C++?
- 20. Как вырезать подстроку из строки в c
- 21. Как извлечь подстроку из строки в C?
- 22. Рекурсивная функция s: удалить подстроку из строки в C
- 23. получить подстроку из строки C в C++
- 24. Лучший способ удалить подстроку из строки
- 25. Удалить подстроку/шаблонное слово из строки
- 26. Удалить подстроку из строки, которая содержит вопросы
- 27. Удалить подстроку из строки, начинающейся с символа
- 28. inno setup - удалить произвольную подстроку из строки
- 29. Удалить подстроку от начала строки
- 30. Возьмите подстроку из строки в C
Вы можете использовать 'зОго :: regex_replace'? –
Или 'boost :: algorithm :: replace_all' – Bogdan