Каков наилучший способ замены внутри строки C ++? - PullRequest
1 голос
/ 30 июля 2011

Мне интересно, какой самый лучший и быстрый способ заменить все вхождения внутри строки в c ++?

Есть ли способ, который не требует зацикливания функции замены?

Ответы [ 3 ]

1 голос
/ 30 июля 2011

Оформление наддува: boost :: алгоритма :: replace_all и boost :: алгоритма :: replace_all _copy

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

http://www.boost.org/doc/libs/1_47_0/doc/html/string_algo/reference.html#header.boost.algorithm.string.replace_hpp

1 голос
/ 30 июля 2011

Вы можете попробовать использовать библиотеку регулярных выражений tr1.Следует отметить, что я не знаю, является ли это лучшим и быстрым способом, поэтому он может быть не совсем тем, о котором просил ОП.

#include <iostream>
#include <regex>
#include <string>

int main()
{
        std::string str = "Hello Earth from Mars! Mars salutes Earth!";
        std::tr1::regex rx("Mars");
        std::string str2 = std::tr1::regex_replace(str, rx, std::string("Saturn"));

        std::cout << str2 << endl;

        return 0;
}

Регулярные выражения также будут доступны в следующем C ++ 0X.стандарт, поэтому вы должны исключить "tr1" из имени пространства имен, когда используете компилятор, совместимый со стандартом C ++ 0X (часть стандарта, реализующего библиотеку regex для C ++ 0X).

0 голосов
/ 30 июля 2011

В алгоритмах STL есть replace_if:

#include <string>
#include <iostream>
#include <algorithm>

bool is_f(char c)
{
    return c == 't';
}

int main(void)
{
        std::string s = "this is a test string";
        std::replace_if(s.begin(), s.end(), is_f, 'd');
        std::cout << s << std::endl;
        return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...