Более безопасная, но простая в использовании и гибкая альтернатива C++ для sscanf()

Когда мне нужно просканировать значения из набора строк, я часто возвращаюсь к C sscanf()исключительно из-за его простоты. и простота использования. Например, я могу очень лаконично извлечь пару значений типа double из строки с помощью:

string str;
double val1, val2;
if (sscanf(str.c_str(), "(%lf,%lf)", &val1, &val2) == 2)
{
    // got them!
}

Очевидно, что это не совсем C++. Я не обязательно считаю это мерзостью, но я всегда ищу лучший способ выполнить обычную задачу. Я понимаю, что "способ C++" для чтения строк - это istringstream, но дополнительный ввод, необходимый для обработки скобок и запятых в приведенной выше строке формата, просто делает его слишком громоздким, чтобы я захотел его использовать.

Есть ли хороший способ подчинить встроенные средства моей воле таким же образом, как описано выше, или есть хорошая библиотека C++, которая делает вышеописанное более безопасным способом? Похоже, Boost.Format действительно хорошо решил проблему вывода, но я не нашел ничего подобного для ввода.

22
задан Jason R 22 March 2012 в 15:56
поделиться