Самое быстрое решение для переноса функции php добавляет косые черты в c ++ - PullRequest
2 голосов
/ 30 июля 2011

string addlashes (string $ str) Возвращает строку с обратным слешем перед символами, которые должны быть заключены в кавычки в запросах к базе данных и т. Д. Это символы одинарных кавычек ('), двойных кавычек ("), backslash () и NUL(NULL-байт).

Я работаю над эквивалентом этой функции php на языке c ++. Сейчас моя функция использует вложенные вызовы замены, где я заменяю \ на \\ и ' с \ '. Это совсем не красиво и очень медленно.

Какое лучшее решение, использующее только стандартные библиотеки и функции c ++? Iзначит самый быстрый способ.

1 Ответ

1 голос
/ 30 июля 2011
  1. Переберите строку за один проход (for цикл) и switch для каждого символа.
  2. При обнаружении символа, который необходимо экранировать, вставьте обратную косую черту в выходной буфер
  3. Вставить текущий символ в выходной буфер.

Используйте std::ostringstream для выходного буфера.

Это очень эффективно (однопроходный, буферизованный вывод) и просто в реализации. Чтобы сделать его еще более эффективным, непосредственно используйте std::string в качестве буфера вывода, добавьте символы, используя push_back и reserve достаточно большую емкость (например, 1.5 * input.length()) перед циклом.

...