Просто добавьте скобки и по умолчанию operator>>
сделает это за вас:
#include <iostream>
#include <string>
#include <complex>
#include <sstream>
int main()
{
std::string s = "123,5.3";//input
std::istringstream is('(' + s + ')');
std::complex<float> c;
is >> c;
std::cout << "the number is " << c << "\n";
}
PS. Забавно, что стиль у всех немного отличается, хотя ответы одинаковы.
Если вы готовы обрабатывать исключения, это также можно сделать с помощью boost:
std::complex<float> c = boost::lexical_cast<std::complex<float> >('('+s+')');