Когда мне нужно просканировать значения из набора строк, я часто возвращаюсь к 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 действительно хорошо решил проблему вывода, но я не нашел ничего подобного для ввода.