Как заменить все вхождения символа в строку?

Существуют шаблоны проектирования, которые покрывают потребность в сложной конструкции - если это невозможно сделать лаконично, создайте фабричный метод или фабричный класс.

С последней версией java и добавлением lambdas, легко создать конструктор, который может принять любой желаемый код инициализации.

class LambdaInitedClass {

   public LamdaInitedClass(Consumer<LambdaInitedClass> init) {
       init.accept(this);
   }
}

Вызовите его с помощью ...

 new LambdaInitedClass(l -> { // init l any way you want });
436
задан chema989 22 July 2016 в 19:00
поделиться

4 ответа

std :: string не содержит такой функции, но вы можете использовать автономную функцию replace из заголовка алгоритма .

#include <algorithm>
#include <string>

void some_func() {
  std::string s = "example string";
  std::replace( s.begin(), s.end(), 'x', 'y'); // replace all 'x' to 'y'
}
689
ответ дан 22 November 2019 в 23:05
поделиться

Что относительно Спускаются на веревке StrReplaceAll? От заголовочного файла:

// This file defines `absl::StrReplaceAll()`, a general-purpose string
// replacement function designed for large, arbitrary text substitutions,
// especially on strings which you are receiving from some other system for
// further processing (e.g. processing regular expressions, escaping HTML
// entities, etc.). `StrReplaceAll` is designed to be efficient even when only
// one substitution is being performed, or when substitution is rare.
//
// If the string being modified is known at compile-time, and the substitutions
// vary, `absl::Substitute()` may be a better choice.
//
// Example:
//
// std::string html_escaped = absl::StrReplaceAll(user_input, {
//                                                {"&", "&amp;"},
//                                                {"<", "&lt;"},
//                                                {">", "&gt;"},
//                                                {"\"", "&quot;"},
//                                                {"'", "&#39;"}});
0
ответ дан 22 November 2019 в 23:05
поделиться

Как предложил Кирилл, либо используйте метод replace, либо выполняйте итерацию по строке, заменяя каждый символ независимо.

В качестве альтернативы вы можете использовать метод find или find_first_of в зависимости от того, что вам нужно сделать. Ни одно из этих решений не сработает за один раз, но с помощью нескольких дополнительных строк кода вы должны заставить их работать на вас. : -)

4
ответ дан 22 November 2019 в 23:05
поделиться

Простой поиск и замена одного символа будет выглядеть примерно так:

s.replace (s.find ("x"), 1, "y")

To сделайте это для всей строки, проще всего будет выполнить цикл до тех пор, пока ваш s.find не начнет возвращать npos . Я полагаю, вы также можете поймать range_error , чтобы выйти из цикла, но это некрасиво.

20
ответ дан 22 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: