Когда мне нужно сканировать значения из нескольких строк, я часто оказываюсь обратно на C sscanf()
строго из-за его простоты и простоты использования. Например, я могу очень кратко вывести пару двойных значений из строки с помощью:
string str;
double val1, val2;
if (sscanf(str.c_str(), "(%lf,%lf)", &val1, &val2) == 2)
{
// got them!
}
Это, очевидно, не очень С++. Я не обязательно считаю это мерзостью, но я всегда ищу лучший способ сделать общую задачу. Я понимаю, что для чтения строк "С++ way" является istringstream
, но дополнительная набрав, необходимая для обработки скобок и запятой в строке формата выше, просто делает ее слишком громоздкой, чтобы заставить меня использовать ее.
Есть ли хороший способ либо сгибать встроенные средства по моей воле так, как это было выше, либо есть ли хорошая библиотека С++, которая делает это более безопасным способом? Похоже, Boost.Format действительно решила проблему вывода в хорошем смысле, но я не нашел ничего подобного для ввода.