заменить одинарные кавычки в строке на \ ' - PullRequest
2 голосов
/ 17 марта 2011

У меня есть строка, содержащая символы. Я хочу заменить их все на \ ', поскольку это используется для вставки в базу данных. Может кто-нибудь предложить мне эффективный способ сделать это? К сожалению, я не могу использовать boost и ограничен STL.

Ответы [ 2 ]

5 голосов
/ 17 марта 2011

Не забудьте также экранировать \, когда это происходит в исходной строке.

std::string escape(std::string const &s)
{
    std::size_t n = s.length();
    std::string escaped;
    escaped.reserve(n * 2);        // pessimistic preallocation

    for (std::size_t i = 0; i < n; ++i) {
        if (s[i] == '\\' || s[i] == '\'')
            escaped += '\\';
        escaped += s[i];
    }
    return escaped;
}
3 голосов
/ 17 марта 2011

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

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

struct escaper
{
  std::string& target;
  explicit escaper( std::string& t ) : target( t ) {}

  void operator()( char ch ) const
  {
     if( ch == '\'') // or switch on any character that 
                     // needs escaping like \ itself
     {
        target.push_back('\\');
     }
     target.push_back( ch );
  }
};

std::string escaped;
std::for_each( instr.begin(), instr.end(), escaper(escaped));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...