Предполагая, что моя программа ожидает аргументы формы [ 0.562 , 1.4e-2 ]
(т.е. пары поплавков), как я должен анализировать этот ввод на С++ без регулярных выражений? Я знаю, что есть много угловых случаев для рассмотрения, когда речь заходит о пользовательском вводе, но пусть предположить, что данный вход близко соответствует указанному выше формату (кроме дополнительных пробелов).
В C я мог бы сделать что-то вроде sscanf(string, "[%g , %g]", &f1, &f2);
, чтобы извлечь два значения с плавающей запятой, что очень компактно.
В С++ это то, что я придумал до сих пор:
std::string s = "[ 0.562 , 1.4e-2 ]"; // example input
float f1 = 0.0f, f2 = 0.0f;
size_t leftBound = s.find('[', 0) + 1;
size_t count = s.find(']', leftBound) - leftBound;
std::istringstream ss(s.substr(leftBound, count));
string garbage;
ss >> f1 >> garbage >> f2;
if(!ss)
std::cout << "Error while parsing" << std::endl;
Как я могу улучшить этот код? В частности, я связан с строкой garbage
, но я не знаю, как еще пропустить ,
между этими двумя значениями.